Ich habe einen Datenrahmen wie diesen:
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 !
Berufung
In [10]: print df.groupby("A")["B"].sum()
wird zurückkehren
A
1 1.615586
2 0.421821
3 0.463468
4 0.643961
Jetzt möchte ich "dasselbe" für Spalte "C" tun. Da diese Spalte Zeichenfolgen enthält, funktioniert sum () nicht (obwohl Sie vielleicht denken, dass es die Zeichenfolgen verketten würde). Was ich wirklich gerne sehen würde, ist eine Liste oder ein Satz von Zeichenfolgen für jede Gruppe, dh
A
1 {This, string}
2 {is, !}
3 {a}
4 {random}
Ich habe versucht, Wege zu finden, dies zu tun.
Series.unique () ( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html ) funktioniert jedoch nicht
df.groupby("A")["B"]
ist ein
pandas.core.groupby.SeriesGroupBy object
Ich hatte gehofft, dass jede Serienmethode funktionieren würde. Irgendwelche Ideen?
apply
undlambda
s beseitigt wird . Ich bin hierher gekommen und habe mich gefragt, warumpandas
eigentlich Concats und kein Fehler beim Summieren von Strings zurückgegeben werden.Mit dieser
apply
Methode können Sie eine beliebige Funktion auf die gruppierten Daten anwenden. Wenn Sie also einen Satz möchten, bewerben Sie sichset
. Wenn Sie eine Liste wünschen, bewerben Sie sichlist
.Wenn Sie etwas anderes wollen, schreiben Sie einfach eine Funktion, die macht, was Sie wollen und dann
apply
das.quelle
.reset_index()
.Möglicherweise können Sie die Funktion
aggregate
(oderagg
) verwenden, um die Werte zu verketten. (Ungetesteter Code)quelle
Sie könnten dies versuchen:
quelle
Eine einfache Lösung wäre:
quelle
df.groupby(['A','B']).c.unique().apply(lambda x: ';'.join(x)).reset_index()
Benannte Aggregationen mit
pandas >= 0.25.0
Seit der Pandas-Version 0.25.0 haben wir Aggregationen benannt, in denen wir unsere Spalten gruppieren, aggregieren und gleichzeitig neuen Namen zuweisen können. Auf diese Weise erhalten wir die MultiIndex-Spalten nicht, und die Spaltennamen sind angesichts der darin enthaltenen Daten sinnvoller:
aggregieren und eine Liste von Zeichenfolgen erhalten
aggregieren und verbinden Sie die Zeichenfolgen
quelle
Wenn Sie Spalte B im Datenrahmen überschreiben möchten, sollte dies funktionieren:
quelle
Nach der guten Antwort von @ Erfan möchten Sie bei einer Analyse der Aggregatwerte meistens die eindeutigen möglichen Kombinationen dieser vorhandenen Zeichenwerte:
quelle