【问题标题】:How to convert the continuous numbers into categorical using pandas?如何使用熊猫将连续数字转换为分类?
【发布时间】:2021-05-08 12:39:33
【问题描述】:

我几天来一直在寻找这个问题的解决方案,但不幸的是没有成功。

我在这样的列中有连续值:

Val: 1, 15, 2, 91, 52, 126

我需要将这些数字转换为区间的类别。例如,第一个数字应属于 (1-10) 类别

我知道我们可以定义区间并使用pd.cut转换数据

pd.cut(df.val, right=False)

但我的问题是我无法定义区间,因为我有数百万的价值。

理想的解决方案是我可以定义区间范围,然后它会自动搜索值并将其转换为该类别。

这将是我理想的输出:

Val     Val_Cat
1        1-10
15       10-20
2        1-10
91       90-100
52       50-60
126      120-130

【问题讨论】:

    标签: python pandas cut categorical-data


    【解决方案1】:

    一个想法是使用数学运算,将整数除以// 10,然后乘以10,最后转换为字符串(必要时使用repalce):

    s = df['Val'] // 10 * 10
    df['new'] = s.replace(0, 1).astype(str) + '-' + (s + 10).astype(str)
    print (df)
       Val  Val_Cat      new
    0    1     1-10     1-10
    1   15    10-20    10-20
    2    2     1-10     1-10
    3   91   90-100   90-100
    4   52    50-60    50-60
    5  126  120-130  120-130
    

    替代f-strings:

    df['new'] = df['Val'].map(lambda x: f'{x//10*10}-{(x//10*10)+10}')
    print (df)
       Val  Val_Cat      new
    0    1     1-10     0-10
    1   15    10-20    10-20
    2    2     1-10     0-10
    3   91   90-100   90-100
    4   52    50-60    50-60
    5  126  120-130  120-130
    

    您的 cut 解决方案可以通过以下方式更改:

    bins = np.arange(0, df['Val'].max() // 10 * 10 + 20, 10)
    
    df['new'] = pd.cut(df.Val, bins = bins, right=False)
    print (df)
       Val  Val_Cat         new
    0    1     1-10     [0, 10)
    1   15    10-20    [10, 20)
    2    2     1-10     [0, 10)
    3   91   90-100   [90, 100)
    4   52    50-60    [50, 60)
    5  126  120-130  [120, 130)
    

    【讨论】:

      【解决方案2】:

      您可以使用所需的相应类别创建一个新列:

      def cat(x): 
          return str(x//10*10) + '-' + str((x//10*10)+10)
      
      df['Val_cat']=list(map(cat, df.Val))
      

      【讨论】:

        猜你喜欢
        • 2019-05-01
        • 1970-01-01
        • 2021-01-13
        • 2020-10-10
        • 2019-08-24
        • 2018-10-05
        • 1970-01-01
        • 2018-05-15
        相关资源
        最近更新 更多