繁体   English   中英

基于另一个 dataframe 的行值对一个 dataframe 中的列求和

[英]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 ,其中它根据df1e列的值对第二个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM