python - 如果日期相同,如何有条件地在日期时间合并两个数据框?

标签 python pandas

我有两个数据框

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 中的行(3 月 8/13/14/15)不包含在合并的 df 中。

我试过关注 this有类似主题的问题,但他们正在使用 cumcount() 来实现其他目标。我也尝试过实现自己的合并、连接、连接等,但都无济于事,例如

test_merge = pd.merge(df1, df2, how='left', on='date_only', left_index=True, right_index=True)

谁能帮我找出合并的正确语法?或者在合并(新列等)之前我是否需要一些其他预处理步骤才能使其工作?非常感谢。

最佳答案

IIUC:

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

关于python - 如果日期相同,如何有条件地在日期时间合并两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71484554/

相关文章:

python - 腌制文件不会在 Mac/Linux 上加载

python - 比较两个字典并打印差异

python - 尝试构建一个程序来组织安全数据并将其显示在图表中

python - 数据框内的 Pandas 转置

python - 更有效的方法是将 pandas 数据框中的列子集居中并保留列名

python - Pandas :解析 24:00 而不是 00:00

python - 删除具有字符值的行

当文件包含 import matplotlib 语句时 Python 代码调试失败(VS Code 和 Pycharm)

python - python中的正则表达式嵌套括号

python - Pandas 过滤串联的多个子字符串