当值不符合任何边界时如何在 pandas.cut() 上给出标签

How to give label on pandas.cut() when a a value does not meet any boundaries

我有一个 dataframe 具有数字连续值,我想将它们转换为序数值作为分类特征。同时,当有数值不符合边界时,重新调整为NaN。但我想为这些值分配一个新标签。

我的dataframe:

          a
0       200
1  10000000
2     60000
3      5000
4         2
5    700000

这是尝试过的:

df = pd.DataFrame({'a':[200,10000000,60000,5000,2,700000]})
bins = [0, 100, 1000, 10000, 50000, 100000, 1000000]
labels = [1, 2, 3, 4, 5, 6]
binned_out = pd.cut(df['a'], bins=bins, labels=labels)

binned_out 输出:

0      2
1    NaN
2      5
3      3
4      1
5      6
Name: a, dtype: category
Categories (6, int64): [1 < 2 < 3 < 4 < 5 < 6]

通过将值 NaN 重新计算为 0:

的预期输出
0      2
1      0
2      5
3      3
4      1
5      6

使用cat.add_categories with Series.fillna:

binned_out = pd.cut(df['a'], bins=bins, labels=labels).cat.add_categories([0]).fillna(0)
print (binned_out)
0    2
1    0
2    5
3    3
4    1
5    6
Name: a, dtype: category
Categories (7, int64): [1 < 2 < 3 < 4 < 5 < 6 < 0]