Home > database >  Pandas - collapase multiple columns into one
Pandas - collapase multiple columns into one

Time:12-11

With this dataframe aggregation:

john = df[df['name']=='John'].agg(
                                total_points=('points', 'sum'),
                                mean=('points', 'mean'),
                                games=('games', 'max'),
                                G=('G', 'sum'),
                                A=('A', 'sum'),
                                FF=('FF', 'sum'),
                                FD=('FD', 'sum'),
                                FT=('FT', 'sum'),
                                FS=('FS', 'sum'),
                                DS=('DS', 'sum'))

I get this:

                  points      games     G    A    FF    FD   FT    FS    DS
total_points  245.500000        NaN   NaN  NaN   NaN   NaN  NaN   NaN   NaN
mean            7.439394        NaN   NaN  NaN   NaN   NaN  NaN   NaN   NaN
games                NaN       33.0   NaN  NaN   NaN   NaN  NaN   NaN   NaN
G                    NaN        NaN  18.0  NaN   NaN   NaN  NaN   NaN   NaN
A                    NaN        NaN   NaN  6.0   NaN   NaN  NaN   NaN   NaN
FF                   NaN        NaN   NaN  NaN  32.0   NaN  NaN   NaN   NaN
FD                   NaN        NaN   NaN  NaN   NaN  25.0  NaN   NaN   NaN
FT                   NaN        NaN   NaN  NaN   NaN   NaN  5.0   NaN   NaN
FS                   NaN        NaN   NaN  NaN   NaN   NaN  NaN  77.0   NaN
DS                   NaN        NaN   NaN  NaN   NaN   NaN  NaN   NaN  16.0

How do I reshape it in order to end up with:

total_points   245.500000       
mean             7.439394       
games                33.0       
G                    18.0        
A                    6.0       
FF                   32.0        
FD                   25.0        
FT                   5.0        
FS                   77.0        
DS                   16.0  

  

CodePudding user response:

Adding sum at the end

df[df['name']=='John'].agg(
                                total_points=('points', 'sum'),
                                mean=('points', 'mean'),
                                games=('games', 'max'),
                                G=('G', 'sum'),
                                A=('A', 'sum'),
                                FF=('FF', 'sum'),
                                FD=('FD', 'sum'),
                                FT=('FT', 'sum'),
                                FS=('FS', 'sum'),
                                DS=('DS', 'sum')).sum(axis=1)

CodePudding user response:

Why don't you directly use the correct mapping for the columns:

john = df[df['name']=='John'].agg(
                                total_points=('points', 'sum'),
                                mean=('points', 'mean'),
                                games=('points', 'max'),
                                G=('points', 'sum'),
                                A=('points', 'sum'),
                                FF=('points', 'sum'),
                                FD=('points', 'sum'),
                                FT=('points', 'sum'),
                                FS=('points', 'sum'),
                                DS=('points', 'sum'))
  • Related