#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. Добавлен ожидаемый результат