2016-10-19 2 views
1

Я пытаюсь добавить новый столбец в панде DataFrame после группировки и с дополнительными условиямиПанды Создать столбец с GroupBy и Суммой с дополнительным условием

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 

ответ

0

Вы можете добавить 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 
+0

Я не уверен, насколько хорошо разбираюсь в вопросе. Если ответ неверный, добавьте желаемый результат. Благодарю. – jezrael

+0

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

+0

См. Edit. – jezrael

Смежные вопросы