pandas 如何绘制直方图以获得所有唯一值的计数?

sigwle7e  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(139)

我有一个Pandas列,其数据对.0001是唯一的
我想绘制一个直方图,每个独特的0.0001数据都有一个条形图。
我通过以下方式实现了很大的粒度

plt.hist(df['data'], bins=500)

字符串
但我希望看到每个唯一值的计数。
我该怎么做呢?谢谢你

xvw2m8pv

xvw2m8pv1#

由于您的值是离散的,因此在这些值之间很好地设置bin边界非常重要。如果边界与值重合,则可能会出现奇怪的舍入伪影。下面的例子每个值都有10次,但是值顶部有边界的直方图将最后两个值放入同一个bin中:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame({'data': np.repeat(np.arange(0.0005, 0.0030, 0.0001), 10)})

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(15, 4))
ax1.hist(df['data'], bins=np.arange(df['data'].min(), df['data'].max(), 0.0001), ec='w')
ax1.set_title('bin boundaries on top of the values')
ax2.hist(df['data'], bins=np.arange(df['data'].min() - 0.00005, df['data'].max() + 0.0001, 0.0001), ec='w')
ax2.set_title('bin boundaries in-between the values')
plt.show()

字符串


的数据
请注意,边界位于两半的版本也将x刻度很好地放置在容器的中心。

vsmadaxz

vsmadaxz2#

您可以指定bin,而不是指定bin的数量bins=500

plt.hist(df['data'], bins=np.arange(df['data'].min(), df['data'].max(), 0.0001) )

字符串

y1aodyip

y1aodyip3#

使用Counter不是更容易吗?

from collections import Counter
cntr = Counter(df['data'])
plt.bar(cntr.keys(),cntr.values())

字符串
通过这种方式,您不必指定bin宽度 * 先验 *。

相关问题