Pandas Groupby en Som slechts één kolom

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=Falsegebruiken 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 Cstaat en je wilt gewoon de nthwaarde, dan kun je dit doen:

df.groupby('A').agg({'B' : 'sum',
                     'C' : lambda x: x.iloc[n]})

Other episodes