Pandas - 添加列,基于索引匹配

9
我正在尝试弄清楚Pandas在将两个系列相加时是否自动匹配索引,还是仅按元素位置相加。如果仅按位置相加,是否有办法让它按索引相加?我已经查看了合并操作,但我不太清楚在这种情况下键是否可以是两者的索引...
例如,如果我有两个数据框:
df1 = index  value
        0      10
        1      12
        2      15
        4      20


df2 = index  value
        0      10
        1      10
        3      10
        4      10

我想添加:

df1[total] = df1[value] + df2[value]

df1 = index  value
        0      20
        1      22
        2      15
        3      10
        4      30

提前感谢您的帮助!
2个回答

5
由于pandas中的内在数据对齐,您可以使用addfill_value=0,它将基于索引对齐对这两个系列进行求和。
df1.add(df2,fill_value=0)

输入:

df1 = pd.Series([10]*4,index=[0,1,3,4])

df2 = pd.Series([10,12,15,20], index=[0,1,2,4])

df1.add(df2,fill_value=0)

输出:

0    20.0
1    22.0
2    15.0
3    10.0
4    30.0
dtype: float64

4

只需要这样做:

pd.concat([df1,df2], axis=1).sum(axis=1)

pd.concat 函数将根据索引合并 2(或更多)个数据框,并进行匹配。 sum(axis=1) 函数会沿行方向计算每行的总和。

以下是一个工作示例:

#create the example data
df1 = pd.DataFrame({'index':[0,1,2,4],'value':[10,12,15,20]}).set_index('index')
df2 = pd.DataFrame({'index':[0,1,3,4],'value':[10,10,10,10]}).set_index('index')

以上内容将为您提供:
In [7]: pd.concat([df1,df2],axis=1).sum(axis=1)
Out[7]:
index
0    20.0
1    22.0
2    15.0
3    10.0
4    30.0
dtype: float64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接