我的数据如下:
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
我怎么知道它们是否最终与上述A-B-C位于同一垃圾箱中?谢谢
答案 0 :(得分:1)
我认为您需要为返回间隔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
答案 1 :(得分:0)
如果您使用:
pd.qcut(s, 3)
输出将告诉您bin间隔。
使用标签将其掩盖。