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

Pandas链式调用assign、loc及pd.Timedelta计算筛选后时间差均值时的KeyError报错解决

修复Pandas链式调用中的KeyError问题

我来帮你排查下第二种方法报错的原因,其实是两个小问题导致的,咱们一步步解决:

错误原因分析

  1. 引用了错误的DataFrame:你在.loc筛选时写了df_reservation_delay['diffe'],但这个变量根本不存在呀!而且就算用原df_test也不对——链式调用中,每一步返回的都是经过处理后的新DataFrame,直接引用原df会导致数据不匹配,还找不到刚添加的diffe列。
  2. 未指定均值计算的列:直接调用.mean()会对所有列尝试计算均值,而你的id列是字符串,不仅会报错,也不是你想要的结果。

修复后的链式代码

把这两个问题修正后,代码就能正常运行了:

df_final = (df_test
            .sort_values(by='id')
            .assign(diffe=lambda x: x['date2'] - x['date1'])  # 用lambda引用当前链式中的DataFrame
            .loc[lambda x: x['diffe'] >= pd.Timedelta(100, 'D')]  # 同样用lambda筛选新添加的列
            ['diffe']  # 只保留我们需要计算均值的列
            .mean()  # 计算时间差的均值
)

关键修改点说明

  • 用lambda x访问链式中的DataFrame:在assign和loc里,x代表的是经过前面步骤处理后的DataFrame,这样就能正确访问刚添加的diffe列,不会出现KeyError。
  • 指定计算均值的列:先选取['diffe']再调用.mean(),确保只计算时间差的均值,避免无效计算。

这样修改后,第二种方法的结果就和第一种完全一致啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:42:40