基于DatetimeIndex与group列合并Pandas DataFrame并实现多国家重复匹配
解决方法
你的问题出在使用了how='inner'的连接方式,这会只保留两边DataFrame在日期索引+group上完全匹配的行,导致无匹配的2021-12-31行被过滤掉。只需修改连接方式为left,同时保留原有的连接键设置,就能实现需求:
result = pd.merge(df1, df2, how='left', left_index=True, right_index=True, on='group')
原理说明
how='left':以df1为基准,保留所有行,仅匹配df2中相同日期索引+group的num2值left_index=True, right_index=True:将两边的DatetimeIndex作为连接键之一on='group':同时将group列作为连接键,确保匹配是日期+分组的精准对应
示例验证
假设我们有以下样例数据:
df1
ctr group num 2021-12-30 00:00:00 US A 1 2021-12-30 00:00:00 CN A 2 2021-12-31 00:00:00 US B 3 2021-12-31 00:00:00 CN B 4
df2
group num2 2021-12-30 00:00:00 A 10
运行上述代码后得到的结果:
ctr group num num2 2021-12-30 00:00:00 US A 1 10.0 2021-12-30 00:00:00 CN A 2 10.0 2021-12-31 00:00:00 US B 3 NaN 2021-12-31 00:00:00 CN B 4 NaN
完全符合需求:每个国家对应分组和日期的num2被正确填充,无匹配的2021-12-31行num2留空(显示为NaN)。
内容的提问来源于stack exchange,提问作者Eric Fail
相关产品推荐
相关产品推荐

