我有一些基于计数的数据,我想将其表示为简单的直方图。但是,我还想将超出某个阈值的外围点分组到“溢出”箱中。我不确定如何做到这一点。以下是一些示例数据:
nums = np.random.randint(1,10,100)
nums = np.append(nums, [80, 100])
mydata = pd.DataFrame(nums)
mydata.hist(bins=20)
在这种情况下,我想将大于 10 的任何东西分组到同一个 bin 中。我最初想将超出这个阈值的值调整为相同的值(即 11),但我认为有一种更 Pythonic 的方法来做到这一点。
答案 0 :(得分:1)
您可以使用 Pandas 的 .cut() 方法来制作自定义 bin:
nums = np.random.randint(1,10,100)
nums = np.append(nums, [80, 100])
mydata = pd.DataFrame(nums)
mydata["bins"] = pd.cut(mydata[0], [0,5,10,100])
mydata["bins"].value_counts().plot.bar()
答案 1 :(得分:0)
如果您不想或不需要解决方案中的 pandas
,或者想要很大的灵活性,例如使用 x 轴标签,那么也许这是一种方法:
import numpy as np
import matplotlib.pyplot as plt
nums = np.random.randint(1, 10, 100)
nums = np.append(nums, [80, 100])
bins = [0, 5, 10, 100]
n, _ = np.histogram(mydata, bins=bins)
labels = [f'{a} to {b}' for a, b in zip(bins, bins[1:])]
fig, ax = plt.subplots()
bar = ax.bar(labels, n)
_ = ax.bar_label(bar)
这产生: