2017-09-18 1 views
1

Ich möchte die pandas groupby Funktion verwenden, aber ohne die Spaltennamen zu beeinflussen. ZB:Verwenden Sie Groupby eines Python Pandas Datenrahmens ohne die Spaltennamen zu erweitern

Meine ursprüngliche Datenrahmen:

df = DataFrame({'int_col' : [1,2,6,8,-1],\ 
       'float_col' : [0.1, 0.2,0.2,10.1,None], \ 
       'str_col' : ['a','b',None,'c','a']}) 

Ergebnis:

float_col int_col str_col 
0  0.1  1  a 
1  0.2  2  b 
2  0.2  6 None 
3  10.1  8  c 
4  NaN  -1  a 

Jetzt habe ich die groupby Funktion anwenden:

f = {'int_col':['max'],'float_col':['sum']} 
df_groupby = df.groupby('str_col', as_index=False,group_keys=False).agg(f) 

Dies führte zu der neuen Datenrahmen:

str_col int_col float_col 
       max  sum 
0  a  1  0.1 
1  b  2  0.2 
2  c  8  10.1 

Im Datenrahmen df_groupby haben die Spaltennamen eine neue Ebene erreicht. Ich möchte diese

THX

+0

Just do 'df.groupby ('str_col', as_index = False) .agg ({ 'int_col': 'max', 'float_col ':' Summe '}) '? – Zero

Antwort

1

entfernen [] im Wörterbuch zu unterdrücken:

f = {'int_col':'max','float_col':'sum'} 
df_groupby = df.groupby('str_col', as_index=False,group_keys=False).agg(f) 
print (df_groupby) 
    str_col float_col int_col 
0  a  0.1  1 
1  b  0.2  2 
2  c  10.1  8 

Wenn Spalten wollen umbenennen:

f = {'int_col':'max','float_col':'sum'} 
d = {'float_col':'sum','int_col':'max'} 
df_groupby = df.groupby('str_col', as_index=False,group_keys=False).agg(f).rename(columns=d) 
print (df_groupby) 
    str_col sum max 
0  a 0.1 1 
1  b 0.2 2 
2  c 10.1 8 
0

habe ich ein ähnliches Problem zu lösen, indem sie:

df_groupby.index = df_groupby.index.get_level_values(0) 
df_groupby.columns = df_groupby.columns.map('||'.join) 

Dies sollte die df abflachen und die Spaltennamen verschmelzen in resultierenden:

  str_col|| int_col||max float_col||sum 
0   a    1    0.1 
1   b    2    0.2 
2   c    8   10.1 
Verwandte Themen