pandas.plot.hist()与.groupby()一起使用

pandas.plot.hist()与.groupby()一起使用,pandas,pandas-groupby,pivot-table,histogram,Pandas,Pandas Groupby,Pivot Table,Histogram,我知道有人问过我;不过,如果可能的话,我希望得到进一步的澄清,以便更好地理解.groupby。 我希望得到与此完全相同的结果,但使用.groupby(): 所以我试着: df.groupby('age')['survived'].count().plot.hist() x轴看起来不对。是否有任何方法可以获得与使用pure.groupby()方法的.pivot()相同的结果?谢谢。我对这个问题投了赞成票,因为pivot和groupby之间有着非常细微的区别。我想你正在寻找类似的东西: df

我知道有人问过我;不过,如果可能的话,我希望得到进一步的澄清,以便更好地理解.groupby。

我希望得到与此完全相同的结果,但使用.groupby():

所以我试着:

df.groupby('age')['survived'].count().plot.hist()


x轴看起来不对。是否有任何方法可以获得与使用pure.groupby()方法的.pivot()相同的结果?谢谢。

我对这个问题投了赞成票,因为
pivot
groupby
之间有着非常细微的区别。我想你正在寻找类似的东西:

df.groupby('age').size().plot.bar(width=1)
plt.show()
然而,我不认为有一种合理的方法可以通过分组获得相同的结果,因为
hist()
需要原始形式的观察值,而
groupby
被设计为后跟一个函数来转换数据(例如
count
min
mean
,等等)

要了解这一点,请注意,通过按年龄分组,然后使用计数,您不再拥有原始年龄数组。例如,对40岁的人进行了13次观察。原始数据看起来像
(40,40,…,40,40)
,而分组计数看起来像:

age  count
 40     13
这不是直方图的数据应该是什么样子。另一个关键区别是直方图中的箱子。如您所见,第一个图统计了年龄在0到10岁之间的人的所有观察结果。通过按年龄分组,您将有11个垃圾箱:一个用于0岁的人,一个用于1岁的人,一个用于2岁的人,等等


总之,
groupby
需要一个转换原始数据的函数,但为了绘制直方图,需要数据处于原始状态。因此,
pivot
是这类任务的首选解决方案,因为它也将数据按
分割,但不将任何函数应用于数据。

扩展Quang的评论,您可能希望对年龄进行分类,而不是按每个年龄进行分组(这是
df.groupby('age')
所做的)

一种方法是使用
age
bin:

df['age group']=pd.cut(df.age,bin=range(0,100,10),right=False)
然后按这些箱子分组,并绘制存活的箱子的条形图。数值计数()

(df.groupby('age group')。存活。值_计数()
.unstack().plot.bar(宽度=1,堆叠=True))
我注意到在你发布的链接中,所有的直方图看起来都有点不同。我认为这是由于每种方法的装箱方式略有不同。切割您自己的垃圾箱的一个优点是,您可以清楚地看到确切的垃圾箱边界:


在某种程度上相当于
(df['surved'].groupby(pd.cut(df.age,bin=10)).value_counts().unstack().plot.bar(width=0.4))
age  count
 40     13