[英]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.