Столбец суммы в одном кадре данных на основе значения строки другого кадра данных - PullRequest
1 голос
/ 06 августа 2020

Скажем, у меня есть один фрейм данных 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 в первый фрейм данных, в котором он суммирует значения столбцов во втором кадре данных df2 на основе значений столбца e в df1.

Ожидаемый результат

   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.

Что я пробовал: написать несколько ламд, применить функцию. Не смог этого сделать. Буду очень признателен за помощь. Спасибо.

Ответы [ 3 ]

4 голосов
/ 06 августа 2020

Попробуйте

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
2 голосов
/ 06 августа 2020

Попробуйте это. Следующее решение суммирует все значения для определенного столбца, если он присутствует в df2, с использованием метода apply и возвращает 0, если такой столбец не существует в df2.

df1.loc[:,"sum"]=df1.loc[:,"e"].apply(lambda x: df2.loc[:,x].sum() if(x in df2.columns)  else 0)
0 голосов
/ 06 августа 2020

Используйте .iterrows() для итерации через фрейм данных, извлекая значения для каждой строки, а также индекса.

Гнездо для стиля итерации l oop может использоваться для получения необходимых значений из второй фрейм данных и примените их к первому

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...