2017-12-06 9 views
1

コード複数の列でgroupby()を集計し、Pandas 0.21+のマルチインデックスの名前を変更するにはどうすればよいですか?

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出力

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 

これはGROUPBYとパンダ0.20まで名前を変更する方法をお勧めしました。この警告なしで同じdf1出力を達成するためのエレガントな方法は何ですか?

+0

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

答えて

1

@Wenは質問のコメントに記載されているように、aggの前に '.B'を削除し、aggの中のあなたの辞書は適切です。次に、mapjoinを使用して、そのマルチインデックス列を平坦化することができます。

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) 

出力:

B_count B_nunique C_sum C_median 
A          
1  3   3  3  1.0 
2  2   2  7  3.5 
関連する問題