Was ist der beste Weg, um einen Groupby in einem Pandas-Datenrahmen durchzuführen, aber einige Spalten von diesem Groupby auszuschließen? zB habe ich folgenden Datenrahmen:
Code Country Item_Code Item Ele_Code Unit Y1961 Y1962 Y1963
2 Afghanistan 15 Wheat 5312 Ha 10 20 30
2 Afghanistan 25 Maize 5312 Ha 10 20 30
4 Angola 15 Wheat 7312 Ha 30 40 50
4 Angola 25 Maize 7312 Ha 30 40 50
Ich möchte nach der Spalte Country und Item_Code gruppieren und nur die Summe der Zeilen berechnen, die unter die Spalten Y1961, Y1962 und Y1963 fallen. Der resultierende Datenrahmen sollte folgendermaßen aussehen:
Code Country Item_Code Item Ele_Code Unit Y1961 Y1962 Y1963
2 Afghanistan 15 C3 5312 Ha 20 40 60
4 Angola 25 C4 7312 Ha 60 80 100
Im Moment mache ich das:
df.groupby('Country').sum()
Dies addiert jedoch auch die Werte in der Spalte Item_Code. Kann ich auf irgendeine Weise angeben, welche Spalten in die sum()
Operation aufgenommen und welche ausgeschlossen werden sollen?
listColumns = list(df.columns)
dann entfernen Sie die nicht gewünschten SpaltenlistColumns.remove('Y1964')
und führen schließlich Ihre Summierung durch:df.groupby(['Country', 'Item_Code'])[listColumns].sum()
cannot reindex from a duplicate axis
Die
agg
Funktion erledigt dies für Sie. Übergeben Sie die Spalten und fungieren Sie als Diktat mit Spalte, Ausgabe:Dadurch werden nur die Gruppe nach Spalten und die angegebenen Aggregatspalten angezeigt. In diesem Beispiel habe ich zwei Agg-Funktionen eingefügt, die auf 'Y1962' angewendet wurden.
Um genau das zu erhalten, was Sie sich erhofft hatten, haben Sie die anderen Spalten in die Gruppe von aufgenommen und Summen auf die Y-Variablen im Frame angewendet:
quelle
Wenn Sie nach einer allgemeineren Methode suchen, um sie auf viele Spalten anzuwenden, können Sie eine Liste mit Spaltennamen erstellen und diese als Index des gruppierten Datenrahmens übergeben. In Ihrem Fall zum Beispiel:
quelle