我有两个具有不同行索引的数据帧,但有些列是相同的。 我想要做的是获取一个数据框,该数据框对具有相同列名的两个数据帧的数量进行求和
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()似乎不适用于具有不同索引的数据框。
答案 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)
这是一种方法。
从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
答案 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