[英]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.