【问题标题】:How do I create a function to perform label encoding如何创建一个函数来执行标签编码
【发布时间】:2020-11-16 06:35:52
【问题描述】:

我有数据框 -

df = pd.DataFrame({'colA':['a', 'a', 'a', 'b' ,'b'], 'colB':['a', 'b', 'a', 'c', 'b'], 'colC':['x', 'x', 'y', 'y', 'y']})

我想编写一个函数,用该列中的频率计数替换每个值。例如 colA 现在将是 [3, 3, 3, 2, 2]

我试图通过创建一个包含值和频率计数的字典来做到这一点,将该字典分配给变量freq,然后将列值映射到freq。我写了以下函数

def LabelEncode_method1(col): 
   freq = col.value_counts().to_dict()
   col = col.map(freq)
   return col.head()```

当我运行以下LabelEncode_method1(df.colA) 时,我得到了3, 3, 3, 2, 2 的结果。但是,当我调用数据框 df 时,colA 的值仍然是 'a', 'a', 'a', 'b', 'b'

  1. 我做错了什么。如何修复我的功能?
  2. 如何编写另一个函数来循环遍历所有列并将值映射到 freq,而不是为每一列分别调用 3 次函数。

【问题讨论】:

    标签: python pandas data-science label-encoding


    【解决方案1】:

    你可以做到groupby + transform

    df['new'] = df.groupby('colA')['colA'].transform('count')
    

    【讨论】:

      【解决方案2】:

      您可以使用map + value_counts(您已经找到了,只需将结果分配回您的DataFrame)。

      df['colA'].map(df['colA'].value_counts())
      

      0    3
      1    3
      2    3
      3    2
      4    2
      Name: colA, dtype: int64
      

      对于所有列,这将创建一个新的 DataFrame:

      pd.concat([
        df[col].map(df[col].value_counts()) for col in df
      ], axis=1)
      

         colA  colB  colC
      0     3     2     2
      1     3     2     2
      2     3     2     3
      3     2     1     3
      4     2     2     3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2020-01-17
        • 2021-09-07
        • 1970-01-01
        相关资源
        最近更新 更多