对来自 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() 似乎不适用于具有不同索引的数据框。
这是一种方法。
从 df1
和 df2
中提取要添加的公共列。
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
我有这两个具有不同行索引但有些列相同的数据框。 我想要做的是获取一个数据框,将具有相同列名的两个数据框的数量相加
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() 似乎不适用于具有不同索引的数据框。
这是一种方法。
从 df1
和 df2
中提取要添加的公共列。
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