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

遍历DataFrame行生成delayed_or_not列时条件判断异常求助

问题分析与解决办法

可能的错误原因

  • 循环赋值方式错误:如果循环中直接用df['delayed_or_not'] = 'delayed',会把整列覆盖为当前循环的结果,最终所有行都显示最后一次循环的判断值。
  • 条件逻辑或列名错误:可能把判断条件写反,或者列名拼写错误,导致比较逻辑失效,所有行触发if分支。
  • 数据类型不匹配:如果两列是字符串格式的数字,按字符串规则比较(比如"10"<"2"会返回True),导致判断结果不符合预期。

正确解决方案

方案1:用Pandas矢量化操作(推荐,高效且不易出错)

使用apply方法:

import pandas as pd

df['delayed_or_not'] = df.apply(
    lambda row: 'delayed' if row['Shipment_day_Scheduled'] < row['Order_to_shipment_day'] else 'not delayed',
    axis=1
)

或者用更高效的numpy.where:

import numpy as np

df['delayed_or_not'] = np.where(
    df['Shipment_day_Scheduled'] < df['Order_to_shipment_day'],
    'delayed',
    'not delayed'
)

方案2:正确使用循环遍历

如果一定要用循环,必须通过索引定位单行赋值:

# 先初始化新列
df['delayed_or_not'] = ''

for idx, row in df.iterrows():
    if row['Shipment_day_Scheduled'] < row['Order_to_shipment_day']:
        df.loc[idx, 'delayed_or_not'] = 'delayed'
    else:
        df.loc[idx, 'delayed_or_not'] = 'not delayed'

额外检查:数据类型转换

如果两列是字符串类型,先转为数值类型再比较:

df['Shipment_day_Scheduled'] = pd.to_numeric(df['Shipment_day_Scheduled'], errors='coerce')
df['Order_to_shipment_day'] = pd.to_numeric(df['Order_to_shipment_day'], errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:21:13