Dus ik heb een dataframe, df1, dat er als volgt uitziet:
A B C
1 foo 12 California
2 foo 22 California
3 bar 8 Rhode Island
4 bar 32 Rhode Island
5 baz 15 Ohio
6 baz 26 Ohio
Ik wil groeperen op kolom A en vervolgens kolom B optellen terwijl ik de waarde in kolom C behoud. Zoiets als dit:
A B C
1 foo 34 California
2 bar 40 Rhode Island
3 baz 41 Ohio
Het probleem is dat wanneer ik zeg dat df.groupby(‘A’).sum() kolom C wordt verwijderd en terugkeert
B
A
bar 40
baz 41
foo 34
Hoe kan ik dit omzeilen en kolom C behouden als ik groepeer en optel?
Antwoord 1, autoriteit 100%
De enige manier om dit te doen is door C in uw groupby op te nemen (de groupby-functie kan een lijst accepteren).
Probeer dit eens:
df.groupby(['A','C'])['B'].sum()
Nog iets om op te merken, als u na de aggregatie met df moet werken, kunt u ook de optie as_index=False
gebruiken om een dataframe-object te retourneren. Deze gaf me problemen toen ik voor het eerst met Panda’s werkte. Voorbeeld:
df.groupby(['A','C'], as_index=False)['B'].sum()
Antwoord 2, autoriteit 14%
Als het je niet uitmaakt wat er in je kolom C
staat en je wilt gewoon de nth
waarde, dan kun je dit doen:
df.groupby('A').agg({'B' : 'sum',
'C' : lambda x: x.iloc[n]})