我想根据名称相同的条件添加2个不同数据框的2列:
import pandas as pd
df1 = pd.DataFrame([("Apple",2),("Litchi",4),("Orange",6)], columns=['a','b'])
df2 = pd.DataFrame([("Apple",200),("Orange",400),("Litchi",600)], columns=['a','c'])
现在我想添加b和c列(如果名称与a相同)。
我尝试了此df1['b+c']=df1['b']+df2['c']
,但它只是添加了列b和c,因此结果为
a b b+c
0 Apple 2 202
1 Litchi 4 404
2 Orange 6 606
但我想
a b+c
0 Apple 202
1 Litchi 604
2 Orange 406
我想我必须使用isin
,但我不知道如何使用?
答案 0 :(得分:1)
在求和运算中,列b
和c
由索引值对齐,因此必须由列a
的{{3}}创建索引:
s1 = df1.set_index('a')['b']
s2 = df2.set_index('a')['c']
df1 = (s1+s2).reset_index(name='b+c')
print (df1)
a b+c
0 Apple 202
1 Litchi 604
2 Orange 406
编辑:如果需要原始值用于不匹配的值,请使用带有参数fill_value=0
的{{3}}
df2 = pd.DataFrame([("Apple",200),("Apple",400),("Litchi",600)], columns=['a','c'])
print (df2)
a c
0 Apple 200
1 Apple 400
2 Litchi 600
s1 = df1.set_index('a')['b']
s2 = df2.set_index('a')['c']
df1 = s1.add(s2, fill_value=0).reset_index(name='b+c')
print (df1)
a b+c
0 Apple 202.0
1 Apple 402.0
2 Litchi 604.0
3 Orange 6.0