我正试图找到一种方法来根据数据集的百分位数对数据集中的每一列进行分类。例如,请考虑列:
ticket
24160
113781
113781
113781
113781
19952
13502
112050
11769
上面列的第20个百分位数是1350.基本上我想将该列转换为分类变量,其中0-20th百分位数的所有值= 1,所有值来自20-40百分位数= 2,所有值来自40-60%百分位数= 3,依此类推。因此票证功能将是1,2,3,4或5的分类变量。我想将此转换应用于除最后一列之外的数据集中的每一列。到目前为止,我编码:
import numpy as np
import pandas as pd
dataset = pd.read_csv('somedataset.csv')
def func(x):
if min(x)<=x< np.percentile(x, 20):
return 1
elif np.percentile(x, 20)<=x< np.percentile(x, 40):
return 2
elif np.percentile(x, 40)<=x< np.percentile(x, 60):
return 3
elif np.percentile(x, 60)<=x< np.percentile(x, 80):
return 4
elif x = max(x):
return 5
dataset[:]= dataset[:].apply(func)
除了我数据集中的最后一列之外,我不知道如何将此函数应用于每一列。我非常感谢任何反馈!
答案 0 :(得分:1)
np.floor(df[df.columns[:-1]].rank() / len(df) / .2).astype(int) + 1
上面的代码返回您想要的内容,其列名与原始数据相同。
df[df.columns[:-1]]
除了您请求的最后一列之外的所有子集.rank()
给出项目的整数等级,从最小到最大/ len(df) / .2
为您提供百分位桶np.floor(...).astype(int) + 1
为您提供从1