You need to enable JavaScript to run this app. Pandas DataFrame多列多规则组合计算复合结果不符合预期问题
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame多列多规则组合计算复合结果不符合预期问题

问题原因及解决方案

核心问题原因

    1. any()用法完全错误:df['Amount'].any()会直接返回布尔值(只要列里有非0/非空值就返回True),你后续用布尔值和50比较,True < 50永远成立,所以代码永远走if分支,所有行Rule_No都被设为0,不会进入else逻辑。同时你规则里的阈值是5000,代码里错写为50,数值也不匹配。
    1. 列名引用错误:DataFrame里的90天最大值列名为Max_90D,你代码里错写为90D_Max,会导致取值错误,条件判断失效。
    1. 规则逻辑理解错误:你原描述的规则1和你给出的预期输出存在冲突(按照原规则1第四行Amount为1000小于5000,应该赋值0,但你的预期输出是6),从预期输出反推,实际需要的是行级判断,不需要全局的if-else分支,所有逻辑直接在行维度处理即可。

正确实现代码

import pandas as pd
import numpy as np

# 先把createdAt转为datetime类型,确保可以取时间属性
df['createdAt'] = pd.to_datetime(df['createdAt'])

# 定义行级判断条件
# 条件1:交易时间晚于23点或早于8点
time_rule = (df['createdAt'].dt.hour >= 23) | (df['createdAt'].dt.hour < 8)
# 条件2:交易金额大于1.5倍Max_90D
amount_rule = df['Amount'] > 1.5 * df['Max_90D']

# 满足任意一个条件赋值6,否则赋值0
df['Rule_No'] = np.where(time_rule | amount_rule, 6, 0)

运行上述代码就可以得到你给出的预期输出结果。

内容的提问来源于stack exchange,提问作者pythondumb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:45:01