[英]Pandas: after using qcut(data,3), how to find the range of the quantile
我的数据如下所示:
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 放在同一个 bin 中? 谢谢
如果您使用:
df['bins'] = pd.qcut(df['your_split_col_name'], 3)
输出将告诉您 bin 间隔。
使用标签掩盖了这一点。
编辑
要使用创建的拆分,您可以使用 pandas groupby 函数。
df['bins'] = pd.qcut(df['your_split_col_name'], 3)
df = df.groupby('bins')
df.describe()
我相信您需要为qcut
添加参数retbins=True
用于返回间隔,因此可以在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.