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

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

我该怎么做?

【问题讨论】:

    标签: python pandas label-encoding


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2016-08-16
      • 2012-11-28
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多