繁体   English   中英

Pandas:使用qcut(data,3)后,如何求分位数的范围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM