保留df索引,将df2的SMA列匹配合并至df的方法
解决DataFrame按索引合并并保留原DataFrame所有行的问题
你之前用inner连接导致数据丢失,是因为该连接仅保留两个DataFrame索引的交集。要满足保留df所有索引、匹配填充SMA、不匹配填NaN的需求,推荐以下几种方案:
方案1:使用pd.merge左连接
将连接方式改为how='left',以df的索引为基准保留所有行:
merged_df = pd.merge(df, df2, left_index=True, right_index=True, how='left')
- 逻辑:左连接会完整保留左侧df的所有索引行,右侧df2中索引匹配的位置填充SMA值,无匹配的位置自动填充
NaN。
方案2:使用DataFrame.join(更简洁)
join方法默认以左连接方式按索引合并,代码更简洁:
merged_df = df.join(df2)
- 该方法等价于方案1的左连接逻辑,无需额外指定参数,适合按索引合并的场景。
方案3:手动重新索引后添加列
如果需要更明确的控制逻辑,可以先将df2的SMA列按df的索引重新对齐,再添加到df中:
merged_df = df.assign(SMA=df2['SMA'].reindex(df.index))
- 逻辑:
reindex(df.index)会将df2的SMA列按照df的索引重新排列,不存在的索引位置自动填充NaN,再通过assign添加为新列。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

