2017-02-15 19 views
3

グループ化して集計した後、データ(Pandas)をソートしようとしています。マイデータ:その後Python Pandasがgroupbyと集約の後にソートする

data = {'from_year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012], 
    'name': ['John', 'John1', 'John', 'John', 'John4', 'John', 'John1', 'John6'], 
    'out_days': [11, 8, 10, 15, 11, 6, 10, 4]} 
persons = pd.DataFrame(data, columns=["from_year", "name", "out_days"]) 

days_off_yearly = persons.groupby(["from_year", "name"]).agg({"out_days": [np.sum]}) 

print(days_off_yearly) 

私は私のデータをソートしています

   out_days 
        sum 
from_year name   
2010  John  17 
2011  John  15 
      John1  18 
2012  John  10 
      John4  11 
      John6  4 

を私はfrom_yearとout_days合計で私のデータをソートしたいとするデータを期待:

   out_days 
        sum 
from_year name   
2012  John4  11 
      John  10 
      John6  4  
2011  John1  18 
      John  15 
2010  John  17 

I試しています

print(days_off_yearly.sort_values(["from_year", ("out_days", "sum")], ascending=False).head(10)) 

しかし、 KeyErrorを取得する: 'from_year'。

助けてください。

答えて

5

あなたはsort_valuesを使用することができますが、最初にreset_index、その後​​:

#simplier aggregation 
days_off_yearly = persons.groupby(["from_year", "name"])['out_days'].sum() 
print(days_off_yearly) 
from_year name 
2010  John  17 
2011  John  15 
      John1 18 
2012  John  10 
      John4 11 
      John6  4 
Name: out_days, dtype: int64 

print (days_off_yearly.reset_index() 
         .sort_values(['from_year','out_days'],ascending=False) 
         .set_index(['from_year','name'])) 
       out_days 
from_year name   
2012  John4  11 
      John   10 
      John6   4 
2011  John1  18 
      John   15 
2010  John   17 
関連する問題