如何基于公共索引配对合并两个带DatetimeIndex的pandas DataFrame
问题原因
你之前的代码返回全False是因为isin()的传参错误:isin()需要传入由待匹配值组成的可迭代对象,你写的[df2.index]是把整个DatetimeIndex对象作为单个元素放进了列表,相当于要在df1的索引里找值等于「整个df2索引对象」的项,自然没有任何匹配结果。
正确实现方案
以下两种方法都可以得到你需要的结果,按需选择即可:
- 方法1:内连接合并(推荐,逻辑最简洁)
直接用pandas的merge方法按索引做内连接,会自动保留两个DataFrame共有的索引行:import pandas as pd # 左右均用索引作为连接键,连接方式选inner(内连接,保留共有键) df = df1.merge(df2, left_index=True, right_index=True, how='inner') - 方法2:修正索引筛选逻辑后拼接
如果你习惯先筛选索引再拼接的写法,去掉isin()里多余的列表嵌套即可:# 直接传入df2.index作为匹配集合,不要额外套列表 common_date_mask = df1.index.isin(df2.index) df1_common = df1[common_date_mask] # 按列方向拼接,自动对齐索引 df = pd.concat([df1_common, df2], axis=1)
效果说明
因为df1不存在缺失日期,最终返回的DataFrame行数和df2的有效行数一致,会保留原有的Value df1、Value df2两列,行索引为两个表共有的日期,和你给出的预期输出格式完全匹配。
内容的提问来源于stack exchange,提问作者jei L
相关产品推荐
相关产品推荐

