You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas不同索引DataFrame列赋值行为及与left merge区别咨询

Pandas 列赋值索引对齐规则解答

核心赋值逻辑

你观察到的赋值效果是Pandas索引对齐机制的原生表现,并不是某类复杂表达式的简写:
给df1新增列时,Pandas会以被赋值的左对象df1的索引为基准,将右侧的df2['XX'] Series 按照索引逐一匹配赋值,匹配失败的位置自动填充NaN,整个赋值过程不会修改df1原有的行索引,所以不会把df2独有的2016-12-31索引加入结果。

和左连接的关系

这个逻辑确实和基于索引的**左连接(left merge)**效果完全一致,等价于下面的完整写法:

df1 = pd.merge(df1, df2[['XX']], left_index=True, right_index=True, how='left').rename(columns={'XX':'BB'})

两种写法输出的结果没有任何区别。

取索引并集的场景

只有当你执行的不是「给现有DataFrame新增列」操作,而是以下两类操作时,Pandas会自动取两个对象的索引并集,缺失位置填充NaN:

  • 两个Series/DataFrame做算术运算,比如:
# 输出索引是两个对象的索引并集:2016-12-31、2018-12-31、2019-12-31、2020-12-31
df1['A'] + df2['XX']
  • 用pd.concat按列合并两个对象,比如:
# 输出会保留所有4个日期索引,缺失值填NaN
pd.concat([df1, df2], axis=1)

如果你希望给df1赋值时也保留df2的独有行,可以先把df1的索引重设为两者的并集再赋值:

df1 = df1.reindex(df1.index.union(df2.index))
df1['BB'] = df2['XX']

内容的提问来源于stack exchange,提问作者dleal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:27:02