Pandas - 添加列,匹配索引

时间:2017-06-12 17:49:05

标签: python pandas

我试图弄清楚Panda是否在一起添加两个系列时,会自动匹配索引,或者它是否只是按元素位置添加。如果只是按位置,有没有办法让它添加索引?我看过合并,但我不太清楚这种情况下的密钥是否可以作为两者的索引......

例如,如果我做了DFs:

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 个答案:

答案 0 :(得分:3)

由于pandas中有intrinsic data alignment,您可以将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

答案 1 :(得分:1)

只需这样做:

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