I mają następujące pytona pandas ramki danych:pyton pandy GroupBy() wynik
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
chciałbym mieć inną kolumnę do przechowywania sumy wartości stosunku C do stałej wartości (oba) A i B. Oznacza to, że coś takiego:
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
próbowałem z pand groupby
i to niby działa:
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()
ale nie wiem jak "dostać" wyniki z res
do df
w uporządkowany sposób. Byłby bardzo zadowolony z wszelkich porad na ten temat. Dziękuję Ci.
Dziękuję @Andy Hayden! Rozwiązanie z 'sumą' jest bardziej ogólne, jak sądzę. W rzeczywistości nie mam '1' w' C' (kiedy 'size' działa idealnie, jak wskazałeś w swoim rozwiązaniu), ale raczej niektóre zmienne, więc żeby to działało poprawnie, muszę iść z' '' '' ' suma ". Ale w każdym razie, genialne, jeszcze raz dziękuję. –
Myślę, że jednym linerem, o którym marzyłeś, jest '' df ['D'] = df.groupby (['A', 'B']). Transform (np.size) ''. W dobrych i złych czasach istnieje "transformacja". :-D –