Python自定义函数实现问题:按条件随机处理DataFrame数据
修正后的代码实现
先明确需求对应的完整处理逻辑:
- 当
type_sale > 1时,new_sale赋值为0 - 当
type_sale == 0且salary > 1时,随机选取50%的行将salary除以2,剩余50%保持原salary值 - 其余情况(如
type_sale == 0但salary <=1、type_sale ==1等),new_sale保持原salary值
错误分析
原代码存在以下问题:
- 调用函数时直接传入列名,未按行级处理数据
np.random.choice语法错误,参数传递混乱,概率设置不符合需求- 函数未处理
else分支,会导致部分行无返回值报错 - 随机逻辑错误,未正确关联
salary值进行计算
修正后的完整代码
import pandas as pd import numpy as np data = {'type_sale':[100,0,24,0,0,20,0,0,0,0], 'salary':[0,0,24,80,20,20,60,20,20,20], } df1 = pd.DataFrame(data, columns = ['type_sale', 'salary']) def cal_fun(type_sale, salary): if type_sale > 1: new_sale = 0 elif (type_sale == 0) and (salary > 1): # 50%概率保持原salary,50%概率除以2 multiplier = np.random.choice([1, 0.5], p=[0.5, 0.5]) new_sale = salary * multiplier else: # 其余情况保持原salary值 new_sale = salary return new_sale # 按行应用自定义函数 df1['new_sale'] = df1.apply(lambda row: cal_fun(row['type_sale'], row['salary']), axis=1) # 查看结果 print(df1)
说明
- 使用
df.apply(..., axis=1)实现行级遍历,将每行的type_sale和salary传入函数 - 修正
np.random.choice的用法,通过选择乘数1或0.5实现50%的随机处理逻辑 - 补充
else分支,覆盖所有未明确的情况,避免报错 - 每次运行结果会有差异(因为随机选择),符合需求中的随机要求
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

