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

Perform mathematical operation on a matching columns from 2 data frames: Python Pandas

我有这两个具有不同行索引但有些列相同的数据框。 我想要做的是获取一个数据框,将具有相同列名的两个数据框的数量相加

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() 似乎不适用于具有不同索引的数据框。

这是一种方法。

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

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

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

这条单线就可以了:

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