亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Python中,如何使用日期時間作為條件進行合并(不精確但有一些時間差異)

在Python中,如何使用日期時間作為條件進行合并(不精確但有一些時間差異)

LEATH 2023-07-18 15:29:11
我有兩個數據框left = pd.DataFrame([['A', 10, datetime(2020, 5, 17, 20, 12, 28)],\                 ['B', 15, datetime(2020, 5, 17, 16, 22, 45)],\                 ['C', 20, datetime(2020, 5, 17, 12, 45, 12)],\                 ['D', 25, datetime(2020, 5, 17, 13, 57, 44)]],\                columns = ['Letter_l', 'Int_l', 'Datetime_l'])和right = pd.DataFrame([['A', 20, datetime(2020, 5, 17, 20, 12, 35)],\                  ['B', 30, datetime(2020, 5, 17, 18, 45, 25)],\                  ['C', 40, datetime(2020, 5, 17, 12, 45, 20)],\                  ['D', 50, datetime(2020, 5, 17, 18, 16, 44)]],\                columns = ['Letter_r', 'Int_r', 'Datetime_r'])我想加入三列中的兩列:Letter和Datetime。對于日期時間,我不是在尋找精確匹配,而是在尋找正確數據幀的最大差異 10 秒。我知道如何在正常條件下加入:merged_df = pd.merge(left=left, right=right, how='left',\                     left_on=['Letter_l'], right_on=['Letter_r'])但我正在尋找的輸出是:|-----|--------------|-----------|--------------------|--------------|-----------|--------------------||     |   Letter_l   |   Int_l   |     datetime_l     |   Letter_r   |   Int_r   |     datetime_r     | |-----|--------------|-----------|--------------------|--------------|-----------|--------------------||  0  |      A       |     10    | 2020-05-17 20:12:28|      A       |     20    | 2020-05-17 20:12:35||  1  |      C       |     20    | 2020-05-17 12:45:12|      C       |     40    | 2020-05-17 12:45:20||-----|--------------|-----------|--------------------|--------------|-----------|--------------------|這可以使用標準來完成嗎pd.merge?當然我可以嘗試使用sqlite3
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

使用on執行asof合并,容差為秒:pd.merge_asofDateTime10


df = pd.merge_asof(left.sort_values('Datetime_l'),

? ? ? ? ? ? ? ? ? ?right.sort_values('Datetime_r'),

? ? ? ? ? ? ? ? ? ?left_by='Letter_l', right_by='Letter_r',

? ? ? ? ? ? ? ? ? ?left_on='Datetime_l', right_on='Datetime_r',

? ? ? ? ? ? ? ? ? ?direction='nearest', tolerance=pd.Timedelta(seconds=10))\

? ? ? ?.dropna(subset=['Letter_r'])

結果:


? Letter_l? Int_l? ? ? ? ? Datetime_l Letter_r? Int_r? ? ? ? ? Datetime_r

0? ? ? ? C? ? ?20 2020-05-17 12:45:12? ? ? ? C? ?40.0 2020-05-17 12:45:20

3? ? ? ? A? ? ?10 2020-05-17 20:12:28? ? ? ? A? ?20.0 2020-05-17 20:12:35


查看完整回答
反對 回復 2023-07-18
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號