У меня есть следующий питона панд фрейм данных:Python панд GroupBy() результат
df = pd.DataFrame({
'A': [1,1,1,1,2,2,2,3,3,4,4,4],
'B': [5,5,6,7,5,6,6,7,7,6,7,7],
'C': [1,1,1,1,1,1,1,1,1,1,1,1]
});
df
A B C
0 1 5 1
1 1 5 1
2 1 6 1
3 1 7 1
4 2 5 1
5 2 6 1
6 2 6 1
7 3 7 1
8 3 7 1
9 4 6 1
10 4 7 1
11 4 7 1
Я хотел бы иметь еще один столбец, хранящий значение суммы над значениями C для фиксированного (оба) А и В. то есть, что-то вроде:
A B C D
0 1 5 1 2
1 1 5 1 2
2 1 6 1 1
3 1 7 1 1
4 2 5 1 1
5 2 6 1 2
6 2 6 1 2
7 3 7 1 2
8 3 7 1 2
9 4 6 1 1
10 4 7 1 2
11 4 7 1 2
Я попытался с пандами groupby
и вид работ:
res = {}
for a, group_by_A in df.groupby('A'):
group_by_B = group_by_A.groupby('B', as_index = False)
res[a] = group_by_B['C'].sum()
, но я не знаю, как «получить» результаты от res
до df
в упорядоченном порядке. Был бы очень доволен любым советом по этому поводу. Спасибо.
Спасибо @ Энди Хайден! Думаю, решение с 'sum' является более общим. На самом деле, у меня нет '' '' '' '' '' '' '' '' '' '' '' '' 'отлично работает, как вы указали в своем решении), а скорее некоторые поплавки, поэтому, чтобы это правильно работало, мне нужно пойти с' sum'. Но в любом случае, блестящий, еще раз спасибо. –
Я думаю, что с одним лайнером, о котором вы мечтали, является '' df ['D'] = df.groupby (['A', 'B']). Transform (np.size) ''. В хорошие и плохие времена '' transform'' есть. : -D –