Pandas создает столбец с Groupby и суммой с дополнительным условием

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Я пытаюсь добавить новый столбец в фрейм данных pandas после группировки и с дополнительными условиями

 df = pd.DataFrame({ 
    'A'  :[4,5,7,8,2,3,5,2,1,1,4,4,2,4,5,1,3,9,7,9], 
    'B'  :[9,5,7,8,3,3,5,2,1,1,4,4,2,4,5,1,3,5,7,9], 
    'C' :[9,5,7,8,3,3,5,2,1,1,4,4,2,4,5,1,3,5,7,9], 
    'D' :[1,0,1,0,1,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0] 
})
df1 = df.groupby(['A', 'B'], as_index=False).transform('sum')
df1 = df.join(df.groupby(['A'])['C'].sum(), on='A', rsuffix='_inward')

df1
  

В приведенном выше запросе он может суммировать и выдавать выходные данные, но как мне добавить условие для df['D'] == 1

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

     A  B  C  D  C_inward
0   4  9  9  1        13
2   7  7  7  1        14
4   2  3  3  1         3
5   3  3  3  1         3
8   1  1  1  1         3
9   1  1  1  1         3
13  4  4  4  1        13
14  5  5  5  1        5
15  1  1  1  1         3
18  7  7  7  1        14
  

Ответ №1:

Вы можете добавить boolean indexing :

 mask = df['D'] == 1
df1 = df[mask].join(df[mask].groupby(['A'])['C'].sum(), on='A', rsuffix='_inward')

print (df1)
    A  B  C  D  C_inward
0   4  9  9  1        13
2   7  7  7  1        14
4   2  3  3  1         3
5   3  3  3  1         3
8   1  1  1  1         3
9   1  1  1  1         3
13  4  4  4  1        13
14  5  5  5  1         5
15  1  1  1  1         3
18  7  7  7  1        14
  

Комментарии:

1. Я не уверен, что хорошо понимаю вопрос. Если ответ неверен, пожалуйста, добавьте желаемый результат. Спасибо.

2. Добавлен ожидаемый результат