Ich habe einen Pandas DataFrame
, den ich durch eine Kombination von drei Spalten A, B, C
gruppiert habe.Behalten Sie eine (invariante) Reihe von jeder Datenrahmengruppe
grouped = df.groupby(["A", "B", "C"])
Mehrere zusätzliche Spalten D, E, F, G
(garantiert) identisch sind für alle Elemente jeder Gruppe, während die anderen Spalten X, Y
innerhalb jeder Gruppe variieren. (Ich weiß bereits, welche Spalten fest sind und welche variieren.)
Ich möchte einen Datenrahmen erstellen, der eine Zeile pro Gruppe enthält und nur aus den Werten für die unveränderlichen Spalten A, B, C, D, E, F, G
besteht. Was ist der einfachste Weg, dies zu tun? Da es viele identische Werte gibt, würde ich lieber angeben, welche Spalten weggelassen werden sollen, als umgekehrt.
Ich habe, indem Sie eine Zeile aus jeder Gruppe mit „Aggregation“ komme und dann die unerwünschten Spalten in einem separaten Schritt zu löschen:
thinned = grouped.aggregate(lambda x: x.iloc[0])
del thinned["X"], thinned["Y"]
Der Zweck diesen die unveränderlichen Werte zu kombinieren, ist mit mehrere neue zusammenfassende Werte, die ich in einem Datenframe mit einer Zeile pro (aktueller) Gruppe berechnet habe.
thinned["newAA"] = grouped.apply(some_function)
thinned["newBB"] = grouped.apply(other_function)
...
Aber ich vermute, es muss eine weniger Runde Weg sein.
warum nicht nur nicht die Spalten an erster Stelle vor dem 'groupby' wählen? z.B. 'df [df.columns.difference (['X', 'Y'])]] groupby (['A', 'B', 'C'])' – EdChum
Das ist eine gute Idee, aber ich muss auch zusammenführen mit einem Datenrahmen, der auf den gruppierten Spalten berechnet wird, die variieren. Es könnte also funktionieren, aber ich muss etwas mit der Indizierung umgehen. – alexis
es scheint nur überflüssig zu gruppieren und dann die Spalten, die Sie nicht interessiert sind, besser, nur nicht sie vor der Operation auswählen – EdChum