Ausgabe
Ich habe den folgenden Code, in dem mein Datenrahmen 3 Spalten enthält
toBeSummed toBeSummed2 toBesummed3 someColumn
0 X X Y NaN
1 X Y Z NaN
2 Y Y Z NaN
3 Z Z Z NaN
oneframe = pd.concat([df['toBeSummed'],df['toBeSummed2'],df['toBesummed3']], axis=1).reset_index()
temp = oneframe.groupby(['toBeSummed']).size().reset_index()
temp2 = oneframe.groupby(['toBeSummed2']).size().reset_index()
temp3 = oneframe.groupby(['toBeSummed3']).size().reset_index()
temp.columns.values[0] = "SameName"
temp2.columns.values[0] = "SameName"
temp3.columns.values[0] = "SameName"
final = pd.concat([temp,temp2,temp3]).groupby(['SameName']).sum().reset_index()
final.columns.values[0] = "Letter"
final.columns.values[1] = "Sum"
Das Problem hier ist, dass mit dem Code, den ich habe, alle Instanzen jedes Werts zusammengefasst werden. Das bedeutet, dass das Aufrufen von final dazu führen würde
Letter Sum
0 X 3
1 Y 4
2 Z 5
Ich möchte jedoch, dass es nicht mehr als einmal zählt, wenn derselbe Wert in der Zeile vorhanden ist (dh in der ersten Zeile gibt es zwei X, sodass nur das eine X gezählt wird). Das heißt, die gewünschte Ausgabe ist
Letter Sum
0 X 2
1 Y 3
2 Z 3
Ich kann weitere Kommentare aktualisieren oder hinzufügen, wenn dies verwirrend ist.
Lösung
Gegeben df
:
toBeSummed toBeSummed2 toBesummed3 someColumn
0 X X Y NaN
1 X Y Z NaN
2 Y Y Z NaN
3 Z Z Z NaN
Tun:
sum_cols = ['toBeSummed', 'toBeSummed2', 'toBesummed3']
out = df[sum_cols].apply(lambda x: x.unique()).explode().value_counts()
print(out.to_frame('Sum'))
Ausgabe:
Sum
Y 3
Z 3
X 2
Beantwortet von – BeRT2me
Antwort geprüft von – Robin (FixError Admin)