说,我有一个数据帧df:
a b c d e
0 1 2 dd 5 Col1
1 2 3 ee 9 Col2
2 3 4 ff 1 Col4
还有另一个数据框df2:
Col1 Col2 Col3
0 1 2 4
1 2 3 5
2 3 4 6
我需要在第一个数据帧中添加一列sum
,其中它基于{{1}中的列df2
的值对第二个数据帧e
中的列值求和}。
预期产量
df1
由于df2中不存在Col4,因此最后一行的 a b c d e Sum
0 1 2 dd 5 Col1 6
1 2 3 ee 9 Col2 9
2 3 4 ff 1 Col4 0
值为0。
我尝试过的方法:编写一些lamda,应用函数。无法做到这一点。 非常感谢您的帮助。谢谢。
答案 0 :(得分:4)
尝试
df['Sum']=df.e.map(df2.sum()).fillna(0)
df
Out[89]:
a b c d e Sum
0 1 2 dd 5 Col1 6.0
1 2 3 ee 9 Col2 9.0
2 3 4 ff 1 Col4 0.0
答案 1 :(得分:2)
尝试一下。以下解决方案使用df2
方法对apply
中存在的特定列的所有值求和,如果0
中不存在这样的列,则返回df2
。
df1.loc[:,"sum"]=df1.loc[:,"e"].apply(lambda x: df2.loc[:,x].sum() if(x in df2.columns) else 0)
答案 2 :(得分:0)
使用.iterrows()
遍历数据帧,以提取每一行以及索引的值。
循环嵌套样式的嵌套可用于从第二个数据帧中获取所需的值并将其应用于第一个数据
import pandas as pd
df1 = pd.DataFrame(data={'a': [1,2,3], 'b': [2,3,4], 'c': ['dd', 'ee', 'ff'], 'd': [5,9,1], 'e': ['Col1','Col2','Col3']})
df2 = pd.DataFrame(data={'Col1': [1,2,3], 'Col2': [2,3,4], 'Col3': [4,5,6]})
df1['Sum'] = df1['a'].apply(lambda x: None)
for index, value in df1.iterrows():
sum = 0
for index2, value2 in df2.iterrows():
sum += value2[value['e']]
df1['Sum'][index] = sum
输出:
a b c d e Sum
0 1 2 dd 5 Col1 6
1 2 3 ee 9 Col2 9
2 3 4 ff 1 Col3 15