Mam taką ramkę danych:
A B C
0 1 0.749065 This
1 2 0.301084 is
2 3 0.463468 a
3 4 0.643961 random
4 1 0.866521 string
5 2 0.120737 !
Powołanie
In [10]: print df.groupby("A")["B"].sum()
wróci
A
1 1.615586
2 0.421821
3 0.463468
4 0.643961
Teraz chciałbym zrobić „to samo” dla kolumny „C”. Ponieważ ta kolumna zawiera ciągi, sum () nie działa (chociaż możesz pomyśleć, że połączy łańcuchy). To, co naprawdę chciałbym zobaczyć, to lista lub zestaw ciągów dla każdej grupy, tj
A
1 {This, string}
2 {is, !}
3 {a}
4 {random}
Próbowałem znaleźć sposób, aby to zrobić.
Series.unique () ( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html ) nie działa, chociaż
df.groupby("A")["B"]
jest
pandas.core.groupby.SeriesGroupBy object
więc miałem nadzieję, że jakakolwiek metoda serii zadziała. Jakieś pomysły?
apply
ilambda
s. Przyszedłem tutaj, zastanawiając się, dlaczegopandas
właściwie konkatuje i nie zwraca błędu podczas sumowania ciągów.Możesz użyć tej
apply
metody, aby zastosować dowolną funkcję do zgrupowanych danych. Więc jeśli chcesz zestaw, aplikujset
. Jeśli chcesz otrzymać listę, aplikujlist
.Jeśli chcesz czegoś innego, po prostu napisz funkcję, która robi to, co chcesz, a potem
apply
to.źródło
.reset_index()
.Możesz użyć funkcji
aggregate
(lubagg
) do konkatenacji wartości. (Nieprzetestowany kod)źródło
Możesz spróbować tego:
źródło
prostym rozwiązaniem byłoby:
źródło
df.groupby(['A','B']).c.unique().apply(lambda x: ';'.join(x)).reset_index()
Nazwane agregacje z
pandas >= 0.25.0
Od wersji 0.25.0 pandy nazwaliśmy agregacje, w których możemy grupować, agregować i jednocześnie przypisywać nowe nazwy do naszych kolumn. W ten sposób nie otrzymamy kolumn MultiIndex, a nazwy kolumn mają większy sens, biorąc pod uwagę zawarte w nich dane:
agregować i uzyskać listę ciągów
agregować i łączyć w ciągi
źródło
Jeśli chcesz nadpisać kolumnę B w ramce danych, powinno to zadziałać:
źródło
Zgodnie z dobrą odpowiedzią @ Erfana, w większości przypadków w analizie zagregowanych wartości potrzebujesz unikalnych możliwych kombinacji tych istniejących wartości znaków:
źródło