IIUC вы можете использовать cut
для достижения этого:
In[33]:
pd.cut(df['a'], bins=[0,3,7,11], right=True, labels=False)+1
Out[33]:
0 2
1 3
2 3
3 1
4 1
5 1
6 1
7 3
8 2
9 2
Здесь вы передадите значения отсечения в cut
, и это будет классифицировать ваши значения, передав labels=False
, что даст им порядковое значение (начиная с нуля), поэтому вы просто +1
им
Здесь вы можете увидеть, как были рассчитаны срезы:
In[34]:
pd.cut(df['a'], bins=[0,3,7,11], right=True)
Out[34]:
0 (3, 7]
1 (7, 11]
2 (7, 11]
3 (0, 3]
4 (0, 3]
5 (0, 3]
6 (0, 3]
7 (7, 11]
8 (3, 7]
9 (3, 7]
Name: a, dtype: category
Categories (3, interval[int64]): [(0, 3] < (3, 7] < (7, 11]]