2017-02-23 63 views
1

我有一個數據集格式化爲熊貓數據框。請參閱seaborn http://seaborn.pydata.org/generated/seaborn.factorplot.html#seaborn.factorplot如何獲得pandas.dataframe中每個組的平均值,如seaborn.factorplot

>>> import seaborn as sns 
>>> sns.set(style="ticks") 
>>> exercise = sns.load_dataset("exercise") 
>>> g = sns.factorplot(x="time", y="pulse", hue="kind", data=exercise) 

隨着sns.factorplot本例中,我可以看到數據的按組的平均值(此實例中,圖表顯示了脈衝的在30年1月15日分鐘組由平均「種」)。

我想直接得到圖表中的「值」。 例如

time  kind  mean standard deviation 
1 min  running xx  xx 
15 min running xx  xx 

我可以使用2 - 深度循環來得到我想要的價值,但我認爲應該有一些easyier在大熊貓,因爲它是一個共同的要求。

與matplotlib不同,它會返回圖中的所有值,seaborn會返回一個Facetgrid對象。 Facetgrid似乎沒有我想要的數據。

回答

3

我想你需要按列timekindaggregatemeanstdgroupby

print (exercise.groupby(['time','kind'])['pulse'].agg(['mean', 'std'])) 
#agg same as aggregate, only less typing ;) 
#print (exercise.groupby(['time','kind'])['pulse'].aggregate(['mean', 'std'])) 
       mean  std 
time kind      
1 min rest  90.2 6.545567 
     walking 93.1 6.297266 
     running 96.1 4.483302 
15 min rest  90.9 6.118279 
     walking 96.6 7.441625 
     running 117.1 12.991023 
30 min rest  91.4 5.337498 
     walking 95.9 6.740425 
     running 126.0 16.964014 

df1 = exercise.groupby(['time','kind'])['pulse'].agg(['mean', 'std']).reset_index() 
print (df1) 
    time  kind mean  std 
0 1 min  rest 90.2 6.545567 
1 1 min walking 93.1 6.297266 
2 1 min running 96.1 4.483302 
3 15 min  rest 90.9 6.118279 
4 15 min walking 96.6 7.441625 
5 15 min running 117.1 12.991023 
6 30 min  rest 91.4 5.337498 
7 30 min walking 95.9 6.740425 
8 30 min running 126.0 16.964014 
+0

呀,這其實我想要的。非常感謝你。 – Zealseeker