Ich habe einen Datenrahmen, in dem ich Groupby für 3 Spalten durchführe und die Summe und Größe der numerischen Spalten aggregiere. Nach dem Ausführen des Codes
df = pd.DataFrame.groupby(['year','cntry', 'state']).agg(['size','sum'])
Ich bekomme so etwas wie unten:
Jetzt möchte ich meine Größenunterspalten von den Hauptspalten trennen und nur eine Einzelgrößenspalte erstellen, aber die Summenspalten unter den Hauptspaltenüberschriften behalten. Ich habe verschiedene Ansätze ausprobiert, aber nicht erfolgreich. Dies sind die Methoden, die ich ausprobiert habe, aber nicht in der Lage bin, Dinge für mich zum Laufen zu bringen:
Wie zähle ich die Anzahl der Zeilen in einer Gruppe in Pandas nach Objekt?
Konvertieren eines Pandas GroupBy-Objekts in DataFrame
Ich bin dankbar, wenn mir jemand dabei helfen kann.
Grüße,
Installieren
d1 = pd.DataFrame(dict(
year=np.random.choice((2014, 2015, 2016), 100),
cntry=['United States' for _ in range(100)],
State=np.random.choice(states, 100),
Col1=np.random.randint(0, 20, 100),
Col2=np.random.randint(0, 20, 100),
Col3=np.random.randint(0, 20, 100),
))
df = d1.groupby(['year', 'cntry', 'State']).agg(['size', 'sum'])
df
Antwort
Der einfachste Weg wäre gewesen, nur laufensize
nachgroupby
d1.groupby(['year', 'cntry', 'State']).size()
year cntry State
2014 United States California 10
Florida 9
Massachusetts 8
Minnesota 5
2015 United States California 9
Florida 7
Massachusetts 4
Minnesota 11
2016 United States California 8
Florida 8
Massachusetts 11
Minnesota 10
dtype: int64
Um das berechnete zu verwenden df
df.xs('size', axis=1, level=1)
Und das wäre nützlich, wenn die size
für jede Spalte unterschiedlich wären . Aber weil die size
Spalte für dieselbe ist ['Col1', 'Col2', 'Col3']
, können wir es einfach tun
df[('Col1', 'size')]
year cntry State
2014 United States California 10
Florida 9
Massachusetts 8
Minnesota 5
2015 United States California 9
Florida 7
Massachusetts 4
Minnesota 11
2016 United States California 8
Florida 8
Massachusetts 11
Minnesota 10
Name: (Col1, size), dtype: int64
Kombinierte Ansicht 1
pd.concat([df[('Col1', 'size')].rename('size'),
df.xs('sum', axis=1, level=1)], axis=1)
Kombinierte Ansicht 2
pd.concat([df[('Col1', 'size')].rename(('', 'size')),
df.xs('sum', axis=1, level=1, drop_level=False)], axis=1)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen