繁体   English   中英

如何在pandas.dataframe中获取每个组的平均值,例如seaborn.factorplot

[英]How to get the mean for each group in pandas.dataframe like seaborn.factorplot

我有一个格式化为pandas数据框的数据集。 请在seaborn http://seaborn.pydata.org/generation/seaborn.factorplot.html#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,我可以按组查看数据的平均值(在本例中,图表显示了按“种类”在1/15/30分钟组的脉冲平均值)。

我想直接获取图表中的“值”。 例如

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

我可以使用2深度循环来获取所需的值,但是我认为在熊猫中应该有一些简单的方法,因为这是常见的要求。

与matplotlib(它将返回绘图中的所有值)不同,seaborn返回Facetgrid对象。 看来Facetgrid没有我想要的数据。

我认为您需要按timekind以及aggregate meanstdtime groupby

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM