在Pandas中绘制GroupBy DataFrame的直方图的意外结果

时间:2017-10-03 03:54:12

标签: python pandas matplotlib dataframe

我有一个如下所示的数据框:

[memcache] memcache_extension="/Applications/MAMP/bin/php/php7.0.8/lib/php/extensions/no-debug-non-zts-20151012/memcache.so" extension=memcache.so enter image description here

dtypes是:

docs_df2.sample(10)

现在我想查看filetype object hash object num_users int64 num_tags int64 dtype: object 的分布情况,因此我绘制了按num_tags分组的数据框的count()(num_tags是唯一的):

enter image description here

到目前为止一切都那么好,但我现在想要一个直方图,这样我就可以清楚地看到我的数据的幂律性质,我得到的结果是我认为它们是以错误的方式绘制的

hash

enter image description here

但这不是我想要的。

我想要的是按照频率排序的 x轴docs_df.groupby('num_tags')['hash'].count().plot(kind='hist')(全部31个)的不同“类型”,以及实际频率的 y轴

这样的事情:

enter image description here

1 个答案:

答案 0 :(得分:2)

你想要做的不是直方图。直方图将用于显示某些度量的频率(计数),同时将一系列度量拟合到指定数量的区间中。您已经计算了数据。你想要的是一个有序的条形图。例如,因为我无法使用您的数据......

df= pd.DataFrame(np.random.randint(1,10,(1000,2)),columns=['num_users','num_tags'])
df.groupby('num_tags').count()['num_users'].plot(kind='bar')

Unsorted Bar Plot

现在我们只需要对条形图进行排序

df.groupby('num_tags').count()['num_users'].sort_values(ascending=False).plot(kind='bar')

enter image description here