簡體   English   中英

如何為可以將值划分為類的列創建 python function

[英]How to create a python function for a column that can divide the values to classes

我有一列“payment_value”。 我想創建另一列並從 payment_value 列中分類為高、中和低。

下面是示例輸入

payment_value
0   146.87
1   204.27
2   333.52
3   336.17
4   401.92

下面是我創建的 function。

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')

當我將 function 應用到 dataframe 以下時出現錯誤。

data3['bins'] = classes(data3[['payment_value']])

錯誤:

The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

請改用Pandas.apply 這是一個例子:

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)

干杯。

您的代碼存在一些問題。 datacolumn是 dataframe 時,First sorted(datacolumn)不會執行您期望的操作,請改用:

datacolumn.sort_values(by='payment_value')

其次, Q1 < datacolumn是所謂的向量化操作,它將 Q1 與 datacolumn 的每個元素進行比較,並返回一個 DataFrame object,結果為 Z84E2C64F38F78BA3EA5C905AB5A2DA27。 它不返回 boolean 值,這就是為什么您會收到“DataFrame 的真值不明確”錯誤的原因。 您需要迭代您的數據,或者按照@Michael Sidorov 的建議使用apply

最后,你的類 function 只print ,它不返回任何東西。 如果要將結果分配給 data3['bins'],則需要使其返回某些內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM