如何为可以将值划分为类的列创建python函数

如何为可以将值划分为类的列创建python函数,python,function,numpy,Python,Function,Numpy,我有一列“付款价值”。我想创建另一个列,并从payment_value列中分类为High、Mid和low 下面是示例输入 payment_value 0 146.87 1 204.27 2 333.52 3 336.17 4 401.92 下面是我创建的函数 def classes(datacolumn): sorted(datacolumn) Q1,Q2 = np.percentile(datacolumn, [25,75]) if Q1 <

我有一列“付款价值”。我想创建另一个列,并从payment_value列中分类为High、Mid和low

下面是示例输入

payment_value
0   146.87
1   204.27
2   333.52
3   336.17
4   401.92
下面是我创建的函数

def classes(datacolumn):
    sorted(datacolumn)
    Q1,Q2 = np.percentile(datacolumn, [25,75])
    if Q1 < datacolumn:
        print('Low')
    elif Q2 >= datacolumn and Q2 < datacolumn:
        print('Med')
    else:
        print('High')
错误:

数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

使用
熊猫。改为应用
。以下是一个例子:

import numpy as np
import pandas as pd


def classes(val, Q1, Q2):
    payment_value = 'None'
    if val < Q1:
        payment_value = 'Low'
    elif Q1 < val <= Q2:
        payment_value = 'Med'
    else:
        payment_value = 'High'
    return payment_value


if __name__=='__main__':

    df = pd.DataFrame(dict(payment_value=[146.87, 204.27, 333.52, 336.17, 401.92]))
    Q1,Q2 = np.percentile(df.payment_value.values, [25,75])
    df.loc[:, 'bins'] = df.loc[:, 'payment_value'].apply(classes, Q1=Q1, Q2=Q2)
    print(df)

将numpy导入为np
作为pd进口熊猫
def等级(val、Q1、Q2):
付款金额=无
如果valelif Q1排序(datacolumn)
不做什么 如果
datacolumn
是一个数据帧,则应改为使用:

datacolumn.sort_values(by='payment_value')
其次,
Q1
是一种所谓的矢量化操作,它比较Q1 ,并返回一个DataFrame对象,其中 布尔结果。它不会返回布尔值,这就是为什么会得到 “数据帧的真值不明确”错误。你需要 迭代您的数据,或者按照@Michael Sidorov的建议使用
apply

最后,类函数只打印,不返回 任何东西如果你想分配一个结果,你需要让它返回一些东西
对于data3['bins']

不清楚是哪一行导致了问题,也不清楚如何运行代码。请看一看。
datacolumn.sort_values(by='payment_value')