2017-02-23 101 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