bins = [x for x in range(-10, 11)]
df['val'].plot(kind='hist', bins=bins)
我想将所有超出范围的值 >10 或 <-10 into the boundary right/left bin but not change their widths. btw suppose the max/min value of
df
设为动态。
我可以构建两个边界箱,如
[-9999, 0]
和[0, 9999]
,但它们的宽度会非常大。另一种方法是通过裁剪
df['val']
的数据
np.clip(df['val'], a_max= bins[-1], a_min=bins[0])
有没有一种简单的方法可以在不改变的情况下实现我的目标
df
如果你想要等宽的条形代表不同宽度的间隔,你需要在条形上放置间隔标签,否则会不清楚。
这是一个带有截止值的示例:
import numpy as np
import pandas as pd
np.random.seed(42)
df = pd.DataFrame({'val': 10 * np.random.randn(1000)})
bins = list(range(-10,11))
df.plot.hist(bins=bins)
cut
来计算间隔,并使用 value_counts
来计算值:
pd.cut(df.val, [-9999] + bins + [9999]).value_counts(sort=False).plot.bar(width=1)