当值不符合任何边界时如何在 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]
我有一个 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]