按值计数进行标签编码
Label encoding by value counts
我尝试为我的城市做标签编码。但是,我希望它根据哪个城市比其他城市更多来标记。比方说;
奥斯陆有 500 行
柏林有 400 行
那不勒斯在数据集中有 300 行
所以标签编码将根据值计数标记那些城市
所以;奥斯陆应标记为 0,柏林应标记为 1,那不勒斯应标记为 2
我该怎么做?
使用Series.map
by Series
with indices by Series.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
我尝试为我的城市做标签编码。但是,我希望它根据哪个城市比其他城市更多来标记。比方说; 奥斯陆有 500 行 柏林有 400 行 那不勒斯在数据集中有 300 行 所以标签编码将根据值计数标记那些城市 所以;奥斯陆应标记为 0,柏林应标记为 1,那不勒斯应标记为 2
我该怎么做?
使用Series.map
by Series
with indices by Series.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