python bin 数据并返回 bin 中点(可能使用 pandas.cut 和 qcut)

标签 python pandas binning

我可以让 pandas cut/qcut 函数返回 bin 端点或 bin 中点而不是一串 bin 标签吗?

目前

pd.cut(pd.Series(np.arange(11)), bins = 5)

0     (-0.01, 2]
1     (-0.01, 2]
2     (-0.01, 2]
3         (2, 4]
4         (2, 4]
5         (4, 6]
6         (4, 6]
7         (6, 8]
8         (6, 8]
9        (8, 10]
10       (8, 10]
dtype: category

带有类别/字符串值。我想要的是

0     1.0
1     1.0
2     1.0
3     3.0
4     3.0

用数值表示 bin 的边缘或中点。

最佳答案

我看到这是一个旧帖子,但无论如何我都会冒昧地回答。

现在可以(引用@chrisb 的回答)使用leftright 访问分类区间的端点。

s = pd.cut(pd.Series(np.arange(11)), bins = 5)

mid = [(a.left + a.right)/2 for a in s]
Out[34]: [0.995, 0.995, 0.995, 3.0, 3.0, 5.0, 5.0, 7.0, 7.0, 9.0, 9.0]

由于区间向左开,向右闭,“第一个”区间(从 0 开始的区间)实际上从 -0.01 开始。要使用 0 作为左值获得中点,您可以这样做

mid_alt = [(a.left + a.right)/2 if a.left != -0.01 else a.right/2 for a in s]
Out[35]: [1.0, 1.0, 1.0, 3.0, 3.0, 5.0, 5.0, 7.0, 7.0, 9.0, 9.0]

或者,你可以说区间向左闭,向右开

t = pd.cut(pd.Series(np.arange(11)), bins = 5, right=False)
Out[38]: 
0       [0.0, 2.0)
1       [0.0, 2.0)
2       [2.0, 4.0)
3       [2.0, 4.0)
4       [4.0, 6.0)
5       [4.0, 6.0)
6       [6.0, 8.0)
7       [6.0, 8.0)
8     [8.0, 10.01)
9     [8.0, 10.01)
10    [8.0, 10.01)

但是,如您所见,您在最后一个时间间隔遇到了同样的问题。

关于python bin 数据并返回 bin 中点(可能使用 pandas.cut 和 qcut),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744558/

相关文章:

python - 简单的肥尾对数分箱

python - 如何制作一个新的数据框来存储原始数据框的列箱的平均值?

python - 如何解析time.time()?

python - 32 位 pyodbc 读取 64 位 Access (accdb)

python Pandas : Wide format to long format but differently - similar to reverse dummy columns

python - Pandas hub_table 多个 aggfunc 带边距

python - 在 Python (pandas) 的多列中进行 Vlookup

python - Azure Python SDK 获取使用详细信息-UsageDetailsOperations 类

python - 如何在多次运行的 Python 脚本中获得组合代码覆盖率

Python 分箱代码并取平均值