python - Pandas:使用 qcut(data,3) 后,如何找到分位数的范围
问题描述
我的数据如下所示:
spread CPB% Bin
0 0.00000787 0.001270648030495552731893265565 B
1 0.00000785 0.003821656050955414012738853503 A
2 0.00000749 0.005821656050955414012738853503 C
3 0.00000788 0.004821656050955414012738853503 B
所以我基本上根据他们的价差分配了一个字母A,B或C。我已经使用以下代码完成了此操作:
s = (df['spread'] * 10**15).astype(np.int64)
df['Bin'] = pd.qcut(s, 3, labels=list('ABC'))
我现在需要做的是,我有 100 个点差(从 0.000001 到 0.0001),我需要知道它们是否最终出现在 Bin A、B 或 C 中。有没有办法找到让我们说“范围”上述分位数?
更准确地说,我有以下点差:
spread
0 0.000100
1 0.000109
2 0.000118
3 0.000127
4 0.000136
5 0.000145
我怎么知道它们最终是否与上面的 ABC 放在同一个垃圾箱中?谢谢
解决方案
我相信您需要为返回间隔添加参数retbins=True
,qcut
因此可以在以下位置重用它cut
:
print (df1)
spread CPB% Bin
0 0.000008 0.001271 B
1 0.000008 0.003822 A
2 0.000007 0.005822 C
3 0.000008 0.004822 B
print (df2)
spread
0 0.000008 <-change data sample for match
1 0.000109
2 0.000118
3 0.000127
4 0.000136
5 0.000145
s = (df1['spread'] * 10**15).astype(np.int64)
v,b = pd.qcut(s, 3, labels=list('ABC'),retbins=True)
print (v)
0 B
1 A
2 A
3 C
Name: spread, dtype: category
Categories (3, object): [A < B < C]
print (b)
[7490000000 7849999999 7869999999 7880000000]
s1 = (df2['spread'] * 10**15).astype(np.int64)
df2['new'] = pd.cut(s1, bins=b, labels=v.cat.categories)
print (df2)
spread new
0 0.000008 A
1 0.000109 NaN
2 0.000118 NaN
3 0.000127 NaN
4 0.000136 NaN
5 0.000145 NaN
推荐阅读
- javascript - 笑话:禁用行返回匹配检查
- google-sheets - Google 表格:插入链接会增加字体大小
- excel - 如何替换除一个vba之外的多个工作表中的所有单元格
- python - JAX 仅在 jit 下的数组切片上应用函数
- flutter - 如何在 Flutter 桌面窗口中授予存储权限?
- c# - 使用反射查找 IConfigureOptions
实现 - javascript - 如何向轮播添加过渡?
- asp.net-core - 在 ASP .NET 核心上不显眼地在数据库上插入两次
- flutter - 颤振键盘类型:TextInputType.number 不适用于 TextEditingController
- python - Python:TclError:无效的命令名称“.!canvas”