一个数据框中的列总和基于另一数据帧的行值

时间:2020-08-06 14:25:41

标签: python pandas 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

还有另一个数据框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,应用函数。无法做到这一点。 非常感谢您的帮助。谢谢。

3 个答案:

答案 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