【问题标题】:How to convert dataset values into percentiles with a function?如何使用函数将数据集值转换为百分位数?
【发布时间】:2018-03-24 23:32:23
【问题描述】:

我正在尝试将数据集值转换为百分位数,并为这个问题创建了一个函数,但它似乎不起作用,但是,当我单独运行函数中使用的相同代码时,它就起作用了。有人能帮我弄清楚为什么我不能在函数中运行代码吗?非常感谢您的帮助。

我有以下数据集:

    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

【问题讨论】:

  • print(percentile_convert(data)

标签: python python-3.x pandas dataset data-conversion


【解决方案1】:

你忘了

drop_duplicates = 真

在调用参数中。 两种情况下的代码都不一样

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2012-10-17
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多