2016-05-17 9 views
0

パンダのデータフレームは以下のようになっています。パンダグループの集約

> category  level  score 
> Bus   travel  0.75 
> Bus   travel  0.60 
> Bus   vehicles 0.50 

私が欲しいのは、「レベル」でグループ化し、各レベルの「カウント」と最大スコアを計算することです。

>  grouped = df.groupby('level').agg(
    { 
     'category': 'count', 
     'score': 'max' 
    }) 

任意のアイデア:私はこれをやってしようとしている

> category travel score vehicles score 
> Bus   2  0.75  1  0.5 

:また、「ハード」の部分は、このような出力を作成するのですか?かなり近いです

答えて

1

セットアップ

from StringIO import StringIO 
import pandas as pd 

text = """category  level  score 
    Bus   travel  0.75 
    Bus   travel  0.60 
    Bus   vehicles 0.50""" 

df = pd.read_csv(StringIO(text), delim_whitespace=1) 

print df 

    category  level score 
0  Bus travel 0.75 
1  Bus travel 0.60 
2  Bus vehicles 0.50 

ソリューション

gdf = df.groupby('category').apply(
    lambda df: df.groupby('level')['score'].agg({'count', 'max'})).unstack() 

gdf.columns = gdf.columns.swaplevel(0, 1) 
gdf = gdf.sort_index(axis=1) 

print gdf 

level travel  vehicles  
      count max count max 
category       
Bus   2 0.75  1 0.5 
+0

!ありがとう! –