You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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值

错误分析

原代码存在以下问题:

  1. 调用函数时直接传入列名,未按行级处理数据
  2. np.random.choice语法错误,参数传递混乱,概率设置不符合需求
  3. 函数未处理else分支,会导致部分行无返回值报错
  4. 随机逻辑错误,未正确关联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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:55:13