我知道我可以用熊猫绘制直方图:
df4 = pd.DataFrame({'a': np.random.randn(1000) + 1})
df4['a'].hist()
但是如何从这样的情节中检索直方图计数呢?
我知道我可以通过(来自Histogram values of a Pandas Series)
来做到这一点count,division = np.histogram(df4['a'])
但是使用df.hist()
之后得到计数值感觉非常多。是否可以直接从熊猫中获取频率值?
答案 0 :(得分:12)
快速回答是:
pd.cut(df4['a'], 10).value_counts().sort_index()
bins: integer, default 10 Number of histogram bins to be used
请看pd.cut(df4['a'], 10).value_counts()
您会看到值与np.histogram
答案 1 :(得分:0)
这是另一种计算熊猫直方图的方法。它更复杂,但IMO更好,因为您避免了pd.cut
会返回破坏任何图的怪异字符串框。您还将获得使用.pipe()
的样式点:
(df['a']
.pipe(lambda s: pd.Series(np.histogram(s, range=(0, 100), bins=20)))
.pipe(lambda s: pd.Series(s[0], index=s[1][:-1]))
)
然后您可以在管道上添加更多内容,例如:
.pipe(lambda s: s/s.sum())
这将为您提供分发。
理想情况下,density
中有一个明智的pd.hist
可以为您做到这一点。 Pandas
确实有一个density=False
关键字,但这毫无意义。我已经读过超过this one之类的解释,但我从未理解过它,也不了解谁会真正使用。在直方图中看到分数的99.9%的时间中,您认为是“分布”,而不是np.sum(pdf * np.diff(bins))
实际计算的density=True
。让你想哭。