按值计数的标签编码

Posted

技术标签:

【中文标题】按值计数的标签编码【英文标题】:Label encoding by value counts 【发布时间】:2022-01-06 01:45:34 【问题描述】:

我尝试为我的城市进行标签编码。但是,我希望它根据哪个城市比其他城市多来标记。比方说; 奥斯陆有 500 行 柏林有 400 行 那不勒斯在数据集中有 300 行 因此标签编码将根据值计数标记这些城市 所以;奥斯陆应标记为 0,柏林应标记为 1,那不勒斯应标记为 2

我该怎么做?

【问题讨论】:

【参考方案1】:

使用Series.map by SeriesSeries.value_counts 索引(默认排序值):

df = pd.DataFrame('col': ['Berlin'] * 4 + ['Oslo'] * 5 + ['Napoli'] * 3)
print (df)

s = df['col'].value_counts()
print (s)
Oslo      5
Berlin    4
Napoli    3
Name: col, dtype: int64

s1 = pd.Series(range(len(s)), index=s.index)
print (s1)
Oslo      0
Berlin    1
Napoli    2
dtype: int64
       
df['newcol'] = df['col'].map(s1)
print (df)
       col  newcol
0   Berlin       1
1   Berlin       1
2   Berlin       1
3   Berlin       1
4     Oslo       0
5     Oslo       0
6     Oslo       0
7     Oslo       0
8     Oslo       0
9   Napoli       2
10  Napoli       2
11  Napoli       2

或者使用字典和enumerate:

s = df['col'].value_counts()
d = v: k for k, v in enumerate(s.index)
print (d)
'Oslo': 0, 'Berlin': 1, 'Napoli': 2      

df['newcol'] = df['col'].map(d)
print (df)
       col  newcol
0   Berlin       1
1   Berlin       1
2   Berlin       1
3   Berlin       1
4     Oslo       0
5     Oslo       0
6     Oslo       0
7     Oslo       0
8     Oslo       0
9   Napoli       2
10  Napoli       2
11  Napoli       2

【讨论】:

以上是关于按值计数的标签编码的主要内容,如果未能解决你的问题,请参考以下文章

stm32编码器停止计数

数据集特征编码和缩放

以数字方式编码 Dataframe 特征

STM32伺服编码器接口

三菱PLC FX3U如何读取多个增量编码器?

CSV 脚本的 PowerShell 获取计数器,编码问题