In pandas
Sie einige groupby Funktionen für jede Spalte in einem Datenrahmen anwenden können, wie im Fall von:Pandas Nehmen groupby Funktion jeder Spalte effizient
pt=df.groupby(['Group']).sum().reset_index()
Lets sagen, dass ich lambda x: (0 < x).sum()
eine Lambda-Funktion anwenden möchten Zählen Sie Zellen mit einem Wert in ihnen und fügen Sie dann eine Zählung der gesamten Elemente in jeder Gruppe hinzu. Gibt es eine effizientere Möglichkeit, dies auf alle Spalten anwenden außer diesen Code zu wiederholen:
import pandas as pd
df=pd.DataFrame({'Group':['W', 'W', 'W', 'E','E','E','N'],
'A':[0,1,5,0,1,5,7],
'B':[1,0,5,0,0,2,0],
'C':[1,1,5,0,0,5,0],
'Total':[2,2,15,0,1,12,7]
})
#Check how many items are present in Group
grp=df.groupby(['Group'])
pt1 = grp['A'].apply(lambda x: (0 < x).sum()).reset_index()
pt2 = grp['B'].apply(lambda x: (0 < x).sum()).reset_index()
pt3 = grp['C'].apply(lambda x: (0 < x).sum()).reset_index()
pct=pd.merge(pt1, pt2, on=['Group'])
pct=pd.merge(pt2, pct, on=['Group'])
#Get total items and merge with counts
pt = df.groupby(['Group'])['Total'].count().reset_index()
pct=pd.merge(pt, pct, on=['Group'])
Ausgang:
Group Total C A B
0 E 3 1 2 1
1 N 1 0 1 0
2 W 3 3 2 2
Was für eine effiziente Art und Weise ist es für n Spalten zu schreiben?
Ich bin mir nicht sicher, ob ich das richtig verstanden. Ich kann den letzten Teil nicht ausführen, da ich nicht weiß, was die 'Total'-Spalte darstellt, sondern' grp [['A', 'B', 'C']]. Apply (Lambda x: (0
ayhan
@ayhan Art von aber für den gesamten Datenrahmen nicht nur A, B, C gibt es einen Weg. Ich versuchte 'pct = df.groupby (['Group']). Apply (Lambda x: (0
ccsv
Es kann sein. Sie müssen jedoch einen Beispieldatenrahmen und Ihre erwartete Ausgabe bereitstellen. Wenn du sagst, dass es nicht funktioniert, weiß ich nicht, was schief gelaufen ist. Wenn du also ein Beispiel für deine erwartete Ausgabe nennst, wäre es einfacher, dir zu helfen. – ayhan