我有一个格式化为 Pandas 数据框的数据集。请在 seaborn 中查看此示例 http://seaborn.pydata.org/generated/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 深度循环来获得我想要的值,但我认为 pandas 中应该有一些更简单的东西,因为这是一个常见的要求。
与将返回图中所有值的 matplotlib 不同,seaborn 返回一个 Facetgrid 对象。 Facetgrid 好像没有我要的数据。
最佳答案
我想你需要groupby
按 time
和 kind
和 aggregate
列mean
和 std
:
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
关于python - 如何获得 pandas.dataframe 中每个组的平均值,如 seaborn.factorplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42416574/