![](/img/trans.png)
[英]Sum one dataframe based on value of other dataframe in same index/row
[英]Sum column in one dataframe based on row value of another dataframe
说,我有一个数据框df:
a b c d e
0 1 2 dd 5 Col1
1 2 3 ee 9 Col2
2 3 4 ff 1 Col4
还有另一个 dataframe df2:
Col1 Col2 Col3
0 1 2 4
1 2 3 5
2 3 4 6
我需要在第一个 dataframe 中添加一个列sum
,其中它根据df1
中e
列的值对第二个 dataframe df2
中的列值求和。
预期 output
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
最后一行的Sum
值为 0,因为 Col4 在 df2 中不存在。
我尝试了什么:写一些 lamdas,应用 function。 没能做到。 我非常感谢您的帮助。 谢谢你。
尝试
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
尝试这个。 以下解决方案使用apply
方法对df2
中存在的特定列的所有值求和,如果df2
中不存在此类列,则返回0
。
df1.loc[:,"sum"]=df1.loc[:,"e"].apply(lambda x: df2.loc[:,x].sum() if(x in df2.columns) else 0)
使用.iterrows()
遍历数据框,提取每行的值以及索引。
嵌套循环样式的迭代可用于从第二个 dataframe 获取所需的值并将它们应用于第一个
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
Output:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.