Pandas按指定列分组后倒序计算行之间天数差的问题求解
解决代码
import pandas as pd # 原有基础逻辑 df = pd.read_csv('../sample/sample.csv') df['date'] = pd.to_datetime(df['date']) # 分组计算倒序天数差核心逻辑 df['deltaT'] = df.groupby('group_id')['date'].apply( lambda x: x - x.shift(-1) ).dt.days.fillna(0) # 若需要输出带「days」后缀的字符串格式,可追加下面这行代码 # df['deltaT'] = df['deltaT'].apply(lambda x: f"{x} days" if x != 0 else "0")
逻辑说明
- 按
group_id分组后,对每个分组内的日期列使用shift(-1),将下一行的日期移到当前行,实现从下到上倒序对比的需求 - 用当前行日期减去下移后的下一行日期,得到的差值取天数属性,最后将每个分组最后一行的空值填0,完全匹配你需要的输出结果
原有尝试的问题
- 尝试1未加分组逻辑,会跨
group_id计算差值,且shift()默认是把上一行内容移到当前行,计算方向和你要的倒序相反 - 尝试2的
where()方法要求传入布尔数组作为判断条件,你直接传入了日期差的timedelta类型数据,类型不匹配触发报错
内容的提问来源于stack exchange,提问作者sharp
相关产品推荐
相关产品推荐

