Мои данные выглядят так:
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), и мне нужно знать, попадают ли они в корзину 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
Если вы используете:
pd.qcut(s, 3)
Выходные данные сообщат вам интервалы между корзинами.
Использование ярлыков маскирует это.