我正在尝试将数据集值转换为百分位数,并且我为此问题创建了一个函数,但它似乎不起作用,但是,当我运行函数中使用的相同代码时,它可以正常工作。请有人能帮我弄清楚为什么我不能在函数中运行代码?非常感谢你的帮助。
我有以下数据集:
A B C D
0 31 78 10 35
1 73 78 6 69
2 59 24 26 0
3 87 55 13 41
4 13 9 32 97
5 32 93 71 52
6 35 72 63 10
7 30 40 29 30
8 85 85 31 2
我希望使用以下函数获得每个值的百分位数:
import pandas as pd
data = pd.read_csv('datafile.csv')
def percentile_convert(x):
x['A_Prcnt'] = pd.qcut(x.A, 100, labels=False) / 100
x['B_Prcnt'] = pd.qcut(x.B, 100, labels=False) / 100
x['C_Prcnt'] = pd.qcut(x.C, 100, labels=False) / 100
x['D_Prcnt'] = pd.qcut(x.D, 100, labels=False) / 100
x = x[['A_Prcnt', 'B_Prcnt', 'C_Prcnt', 'D_Prcnt']]
return x
data = data.apply(percentile_convert, axis=1)
运行后,我收到以下错误:
ValueError: ("Bin edges must be unique: array([31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,\n 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31]).\nYou can drop duplicate edges by setting the 'duplicates' kwarg", 'occurred at index 0')
但是如果我在函数之外运行相同的代码,就像这样:
data['A_Prcnt'] = pd.qcut(data.A, 100, labels=False, duplicates='drop') / 100
data['B_Prcnt'] = pd.qcut(data.B, 100, labels=False, duplicates='drop') / 100
data['C_Prcnt'] = pd.qcut(data.C, 100, labels=False, duplicates='drop') / 100
data['D_Prcnt'] = pd.qcut(data.D, 100, labels=False, duplicates='drop') / 100
data = data[['A_Prcnt', 'B_Prcnt', 'C_Prcnt', 'D_Prcnt']]
print(data)
我得到了想要的结果,即:
A_Prcnt B_Prcnt C_Prcnt D_Prcnt
0 0.24 0.62 0.12 0.49
1 0.74 0.62 0.00 0.87
2 0.62 0.12 0.37 0.00
3 0.99 0.37 0.24 0.62
4 0.00 0.00 0.74 0.99
5 0.37 0.87 0.99 0.74
6 0.49 0.49 0.87 0.24
7 0.12 0.24 0.49 0.37
8 0.87 0.75 0.62 0.12
答案 0 :(得分:0)
嗯,你忘记了
drop_duplicates = True
在调用参数中。
两种情况下的代码都不同