如何对索引不同的两个Pandas DataFrame指定列进行元素相加?
解决不同索引的Pandas Series/DataFrame指定列相加问题
没问题,这在Pandas里其实很好处理,核心就是利用它的自动索引对齐特性来搞定不同索引的元素相加,我用你给的示例一步步来演示:
1. 基础示例:Series相加
首先先还原你的示例代码:
import pandas as pd Sr1 = pd.Series([1,2,3,4], index = [0, 1, 2, 3]) Sr2 = pd.Series([3,4,-3,6], index = [1, 2, 3, 4])
方法1:直接相加(保留索引对齐,缺失值为NaN)
直接用+运算符的话,Pandas会自动按索引匹配元素相加,没有匹配到的索引会返回NaN:
result = Sr1 + Sr2 print(result)
输出结果:
0 NaN 1 5.0 2 6.0 3 1.0 4 NaN dtype: float64
方法2:填充缺失值后相加(避免NaN)
如果希望那些只在单个Series里存在的索引,用0来填充后再相加,可以用Series.add()方法,指定fill_value=0:
result_with_fill = Sr1.add(Sr2, fill_value=0) print(result_with_fill)
输出结果:
0 1.0 1 5.0 2 6.0 3 1.0 4 6.0 dtype: float64
2. 扩展到DataFrame指定列相加
如果是两个包含多列的DataFrame,要对指定列(比如名为target_col的列)执行相同操作,逻辑完全一致:
假设我们有两个DataFrame:
df1 = pd.DataFrame({'target_col': [1,2,3,4], 'other_col': ['a','b','c','d']}, index=[0,1,2,3]) df2 = pd.DataFrame({'target_col': [3,4,-3,6], 'other_col': ['x','y','z','w']}, index=[1,2,3,4])
要将两个DataFrame的target_col相加,得到新列,可以这样写:
# 填充缺失值后相加,结果作为新列加入df1(也可以选择加入df2或者新建DataFrame) df1['sum_col'] = df1['target_col'].add(df2['target_col'], fill_value=0)
执行后df1的sum_col列就会包含对应索引相加后的结果,索引0的值为1;如果你想保留所有索引,可以把结果存到新的DataFrame中:
sum_result = pd.DataFrame({'sum_col': df1['target_col'].add(df2['target_col'], fill_value=0)})
关键逻辑说明
Pandas的索引对齐机制会自动帮你匹配相同索引的元素进行运算,不需要手动循环去对应索引。如果不需要保留单个索引的元素,直接用+即可;如果希望不丢失任何索引的数据,就用add()配合fill_value参数来填充缺失项。
内容的提问来源于stack exchange,提问作者Dsto4
相关产品推荐
相关产品推荐

