Auswählen bestimmter Spalten für die Berechnung der Zeile weisen insgesamt in pandas
Gibt es eine Möglichkeit, eine Summe über die Spalten nach der Gruppierung in der pandas-Daten-frame? Ich habe zum Beispiel den folgenden Daten Rahmen:
ID W_1 W_2 W_3
1 0.1 0.2 0.3
1 0.2 0.4 0.5
2 0.3 0.3 0.2
2 0.1 0.3 0.4
2 0.2 0.0 0.5
1 0.5 0.3 0.2
1 0.4 0.2 0.1
Möchte ich eine zusätzliche Spalte mit der Bezeichnung "my_sum" das Summen der ersten Zeile in allen Spalten (W_1, W_2, W_3). Die Ausgabe wäre etwas wie dieses:
ID W_1 W_2 W_3 my_sum
1 0.1 0.2 0.3 0.6
1 0.2 0.4 0.5 1.1
2 0.3 0.3 0.2 0.8
2 0.1 0.3 0.4 0.8
2 0.2 0.0 0.5 0.7
1 0.5 0.3 0.2 1.0
1 0.4 0.2 0.1 0.7
Ich tred die folgenden:
df['my_sum'] = df.groupby('ID')['W_1','W_1','W_1'].transform(sum,axis=1)
aber diese Summen alle Einträge nur W_1. Die Dokumentation erwähnt die Achse parmeter, aber ich bin nicht sicher, warum es nicht wirksam ist.
Ich sah in diesem Frage und auch diese, aber Sie sind anders als das, was ich will.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Sache, die bleibt, ist die
.sum(1)
. Hier sind einige einfallsreiche alternativen zu den Antworten schon gepostet.df.select_dtypes
df.iloc
Boolesche Indexierung
Dies ist widerlich Nutzung Ihrer Daten.
DataFrame.sum
odernumpy.sum
Filter auf die Spalte-Namen mit
str.contains
:Alternativ versuchen Sie summieren sich auf ein numpy-array direkt für die Leistung:
oder:
Brauchen Sie nicht zu der Gruppe, die von nichts, wenn Sie nur wollen, um die Summe über mehrere Zeilen. Verwenden Sie einfach
axis=1
in Ihrer Summe.Die crux ist, herauszufinden, wie zu erkennen, welche Spalten für die Summe über. In Ihrem Fall, können wir wählen Sie die entsprechenden Spalten in vielerlei Hinsicht. Wir wissen nicht wirklich, was Ihre "echten" Daten aussieht.
@MaxU bedeckt, die mehr praktische Lösungen. Diese sollte man schnell sein.
Oder wenn es wirklich nur
['W_1', 'W_2', 'W_3']
Außerdem können Sie eine Liste der dataframe, der angibt, welche Spalten für die Summe über. Dies ist hilfreich, da Spalten, die leicht zu setzen in form einer Liste.