2017-12-06 6 views
1

-CodeWie groupby() für mehrere Spalten aggregiert und den Multi-Index in Pandas 0.21+ umbenannt wird?

import pandas as pd 
df = pd.DataFrame({'A': [1, 1, 1, 2, 2], 
        'B': range(5), 
        'C': range(5)}) 

df1 = df.groupby('A').B.agg({'B': ['count','nunique'],'C': ['sum','median']}) 
df1.columns = ["_".join(x) for x in df1.columns.ravel()] 

df1 Ausgabe

B_count B_nunique C_sum C_median 
A          
1  3   3  3  1.0 
2  2   2  7  3.5 

__main__:1: FutureWarning: using a dict on a Series for aggregation 
is deprecated and will be removed in a future version 

Dies war der empfohlene Weg bis Pandas GROUPBY und benennen 0,20 Warnung. Was ist der elegante Weg, die gleiche DF1-Ausgabe ohne diese Warnung zu erreichen?

+0

https://stackoverflow.com/questions/44635626/pandas-aggregation-warning-futurewarning-using-a-dict-with-renaming-is-depreca – Wen

Antwort

1

Wie @Wen in Frage Kommentare angegeben, entfernen Sie die ".B" vor agg, und Ihr Wörterbuch innerhalb von agg ist richtig. Als nächstes können Sie map und join verwenden, um diese Multiindexspalten zu reduzieren.

import pandas as pd 
df = pd.DataFrame({'A': [1, 1, 1, 2, 2], 
        'B': range(5), 
        'C': range(5)}) 

df1 = df.groupby('A').agg({'B': ['count','nunique'],'C': ['sum','median']}) 
df1.columns = df1.columns.map('_'.join) 

Ausgang:

B_count B_nunique C_sum C_median 
A          
1  3   3  3  1.0 
2  2   2  7  3.5 
Verwandte Themen