我有兩個資料框
df1:
datetime value date_only
324 2022-03-09 09:26:12.185 48 2022-03-09
626 2022-03-10 08:39:59.087 24 2022-03-10
923 2022-03-11 09:20:41.032 30 2022-03-11
1218 2022-03-12 09:54:11.748 44 2022-03-12
和df2:
datetime amount date_only
22 2022-03-08 09:53:12.040358 5.0 2022-03-08
313 2022-03-09 08:34:55.160470 16.0 2022-03-09
339 2022-03-09 10:39:25.053984 3.0 2022-03-09
623 2022-03-10 08:30:14.754819 7.0 2022-03-10
916 2022-03-11 08:51:41.312365 14.0 2022-03-11
1217 2022-03-12 09:40:40.462450 13.0 2022-03-12
1472 2022-03-13 07:52:02.369454 8.0 2022-03-13
1774 2022-03-14 07:58:23.352999 8.0 2022-03-14
2095 2022-03-15 08:50:33.755545 7.0 2022-03-15
我正在嘗試合并這兩個資料框,以便包含來自 df1 的所有內容,并且僅包含 df2 在同一日期(使用 date_only)出現的行,但根據日期時間(或索引)按時間順序穿插,如下所示:
datetime value date_only amount
313 2022-03-09 08:34:55.160470 null 2022-03-09 16.0
324 2022-03-09 09:26:12.185 48 2022-03-09 null
339 2022-03-09 10:39:25.053984 null 2022-03-09 3.0
623 2022-03-10 08:30:14.754819 null 2022-03-10 7.0
626 2022-03-10 08:39:59.087 24 2022-03-10 null
916 2022-03-11 08:51:41.312365 null 2022-03-11 14.0
923 2022-03-11 09:20:41.032 30 2022-03-11 null
1217 2022-03-12 09:40:40.462450 null 2022-03-12 13.0
1218 2022-03-12 09:54:11.748 44 2022-03-12 null
請注意,df2 中日期不在 df1 中的行(2015 年 3 月 8/13/14/15)不包含在合并的 df 中。
我嘗試用類似的主題來關注這個問題,但他們正在使用 cumcount() 來實作其他目標。我也嘗試過實作我自己的合并、連接、連接等,但無濟于事,例如
test_merge = pd.merge(df1, df2, how='left', on='date_only', left_index=True, right_index=True)
誰能幫我找出這個合并的正確語法?或者我是否需要在合并之前進行一些其他預處理步驟(新列等)才能使其作業?太感謝了。
uj5u.com熱心網友回復:
國際大學聯盟:
out = pd.concat([df1, df2.loc[df2['date_only'].isin(df1['date_only'])]]).sort_index()
print(out)
# Output
datetime value date_only amount
313 2022-03-09 08:34:55.160470 NaN 2022-03-09 16.0
324 2022-03-09 09:26:12.185 48.0 2022-03-09 NaN
339 2022-03-09 10:39:25.053984 NaN 2022-03-09 3.0
623 2022-03-10 08:30:14.754819 NaN 2022-03-10 7.0
626 2022-03-10 08:39:59.087 24.0 2022-03-10 NaN
916 2022-03-11 08:51:41.312365 NaN 2022-03-11 14.0
923 2022-03-11 09:20:41.032 30.0 2022-03-11 NaN
1217 2022-03-12 09:40:40.462450 NaN 2022-03-12 13.0
1218 2022-03-12 09:54:11.748 44.0 2022-03-12 NaN
uj5u.com熱心網友回復:
IIUC,您不需要合并。concat在 df1 中按日期過濾 df2 的行后,只需您的資料sort_values:
out = (pd
.concat([df1, df2[df2['date_only'].isin(df1['date_only'])]])
.sort_values(by=['datetime'])
)
輸出:
datetime value date_only amount
313 2022-03-09 08:34:55.160470 NaN 2022-03-09 16.0
324 2022-03-09 09:26:12.185 48.0 2022-03-09 NaN
339 2022-03-09 10:39:25.053984 NaN 2022-03-09 3.0
623 2022-03-10 08:30:14.754819 NaN 2022-03-10 7.0
626 2022-03-10 08:39:59.087 24.0 2022-03-10 NaN
916 2022-03-11 08:51:41.312365 NaN 2022-03-11 14.0
923 2022-03-11 09:20:41.032 30.0 2022-03-11 NaN
1217 2022-03-12 09:40:40.462450 NaN 2022-03-12 13.0
1218 2022-03-12 09:54:11.748 44.0 2022-03-12 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444544.html
上一篇:熊貓,如何切片串列列
