Pandas中两个同形状DataFrame相加后行拼接,如何实现对应元素相加?
问题根源
你这情况是因为两个DataFrame的行索引不匹配,add()方法默认会按索引对齐数据,把两个df的索引做并集,不匹配的行用fill_value填充后相加,结果行数就变成了两个df的行数总和(96+96=192)。
实现对应位置相加的方法
以下几种方式都能让你得到(96,3)的结果:
方法1:重置索引后相加
把两个df的索引都换成默认的整数序列,这样就能保证行位置完全对应:
d1_reset = d1.reset_index(drop=True) d2_reset = d2.reset_index(drop=True) result = d1_reset.add(d2_reset, fill_value=0)
方法2:直接基于数值数组运算
完全跳过索引对齐,直接取两个df的底层数值数组做加法,之后再转回DataFrame:
# 无缺失值的情况 result = pd.DataFrame(d1.values + d2.values, columns=d1.columns) # 有缺失值的话,先填充0再相加 result = pd.DataFrame(d1.fillna(0).values + d2.fillna(0).values, columns=d1.columns)
方法3:统一两个df的索引
如果其中一个df的索引是你想要的基准,直接把另一个df的索引改成和它一致:
d2 = d2.set_index(d1.index) result = d1.add(d2, fill_value=0)
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

