对来自2个数据帧的匹配列执行数学运算:Python Pandas

时间:2015-04-23 15:43:21

标签: python pandas frame

我有两个具有不同行索引的数据帧,但有些列是相同的。 我想要做的是获取一个数据框,该数据框对具有相同列名的两个数据帧的数量进行求和

df1 = pd.DataFrame([(1,2,3),(3,4,5),(5,6,7)], columns=['a','b','d'], index = ['A', 'B','C','D'])
df1
   a  b  d
A  1  2  3
B  3  4  5
C  5  6  7

df2 = pd.DataFrame([(10,20,30)], columns=['a','b','c'])

df2
    a   b   c
0  10  20  30

输出数据帧:

    a   b  d
A  11  22  3
B  13  24  5
C  15  16  7

这是最好的方法吗? .add()似乎不适用于具有不同索引的数据框。

3 个答案:

答案 0 :(得分:2)

这个单线程可以解决问题:

In [30]: df1 + df2.ix[0].reindex(df1.columns).fillna(0)
Out[30]:
    a   b  d
A  11  22  3
B  13  24  5
C  15  26  7

答案 1 :(得分:0)

这是一种方法。

df1df2中提取要添加的常用列。

In [153]: col1 = df1.columns

In [154]: col2 = df2.columns

In [155]: cols = list(set(col1) & set(col2))

In [156]: cols
Out[156]: ['a', 'b']

现在添加值

In [157]: dff = df1

In [158]: dff[cols] = df1[cols].values+df2[cols].values

In [159]: dff
Out[159]:
    a   b  d
A  11  22  3
B  13  24  5
C  15  26  7

答案 2 :(得分:0)

我认为这可能是最短的方法:

In [36]:

print df1 + df2.ix[0,df1.columns].fillna(0)
    a   b  d
A  11  22  3
B  13  24  5
C  15  26  7

第1步产生series,如下所示:     在[44]:

df2.ix[0,df1.columns]
Out[44]:
a    10
b    20
d   NaN
Name: 0, dtype: float64

填写nan并将其添加到df1就足够了,因为索引将会对齐:

In [45]:

df2.ix[0,df1.columns].fillna(0)
Out[45]:
a    10
b    20
d     0
Name: 0, dtype: float64