Pandas分组计算Timedelta差值时报Cannot add DateOffset to TimedeltaArray错误咨询
问题解决方法
报错原因
你当前写法直接对两个GroupBy分组对象执行减法运算属于非法操作,分组场景下的移位差值需要先对指定列执行分组移位得到对齐的序列后再做算术运算,直接操作GroupBy实例会触发类型不匹配错误。
修复代码
首先先确保V2、V3列是标准timedelta类型(兜底避免隐式类型问题):
import pandas as pd df['V2'] = pd.to_timedelta(df['V2']) df['V3'] = pd.to_timedelta(df['V3'])
简洁写法
直接对V2列做分组移位后和V3列相减,再转换为分钟单位:
df['V4'] = (df['V3'] - df.groupby('V1')['V2'].shift()).dt.total_seconds() // 60
自定义分组处理写法
如果需要更灵活的分组内逻辑,也可以用apply实现:
df['V4'] = df.groupby('V1', group_keys=False).apply( lambda group: (group['V3'] - group['V2'].shift(1)).dt.total_seconds() // 60 )
结果验证
运行上述代码后得到的V4列和你预期的输出完全一致,每组第一行因为没有上一行V2的值会自动填充NaN,后续行的差值计算结果完全匹配预期值。
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

