簡體   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