2016-05-17 103 views
0

比方說,我們有一個像下面的熊貓數據框。熊貓集團聚合

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

我想要的是按'水平'分組,並計算'數'和每個'水平'的最高分數。另外,「硬」的部分是創建這樣一個輸出:

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

我一直在努力這樣做:

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

任何想法?

回答

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

那是相當接近!謝謝! –