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

Pandas用apply设置END_DATE时报'Timestamp' object is not subscriptable如何解决

错误原因

  1. 你调用apply的对象是df_5['END_DATE']单列,传入自定义函数time1to0的参数是每行对应字段的单个Timestamp值,而非完整DataFrame,在函数内尝试用下标取SCU_KEY等其他字段自然会触发'Timestamp' object is not subscriptable报错。
  2. 原代码里使用shift(1)取的是上一行数据,和你需要的「取下一行字段值」的需求完全相反,就算调用方式修正也得不到预期结果。

正确实现

不需要使用apply,直接用布尔索引批量筛选赋值即可,执行效率更高:

# 构造匹配条件
mask = (
    # 当前行REVENUE_STATUS_FLAG为1,下一行变为0
    (df_5['REVENUE_STATUS_FLAG'] == 1)
    & (df_5['REVENUE_STATUS_FLAG'].shift(-1) == 0)
    # 当前行与下一行SCU_KEY、PRODUCT完全一致
    & (df_5['SCU_KEY'] == df_5['SCU_KEY'].shift(-1))
    & (df_5['PRODUCT'] == df_5['PRODUCT'].shift(-1))
)

# 符合条件的行,END_DATE赋值为下一行的OPTY_CLOSE_DATE
df_5.loc[mask, 'END_DATE'] = df_5['OPTY_CLOSE_DATE'].shift(-1).loc[mask]

注意事项

运行代码前请确保DataFrame已经按照SCU_KEY、PRODUCT和对应时间维度排序,保证shift(-1)取到的是同组的下一行数据,不会出现跨组匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:04