Pandas DataFrame按ColA分组后计算ColC前两项之和生成新列的简便方法
实现方案
用pandas内置的分组+滚动窗口计算即可,全程是向量化操作,比自行循环效率高几十到上百倍,代码也非常简洁:
完整代码
import pandas as pd # 第一步:处理日期列+排序,确保分组内日期顺序正确 df['ColB'] = pd.to_datetime(df['ColB']) df = df.sort_values(by=['ColA', 'ColB']).reset_index(drop=True) # 第二步:分组计算滚动和后位移1位,得到前N行的和 df['NewCol'] = df.groupby('ColA')['ColC']\ .rolling(2, min_periods=1)\ .sum()\ .reset_index(level=0, drop=True)\ .shift(1)
逻辑说明
- 首先把
ColB转为日期类型,避免字符串排序出现日期顺序错误的问题,再按分组列+日期列全局排序,保证每组内的行顺序符合要求 - 分组后对
ColC做滚动窗口计算:窗口大小设为2,min_periods=1表示窗口内数据不足2条时,按现有条数计算和 - 滚动求和的结果位移1位(
shift(1)),就把当前行的滚动和变成了前一行/前两行的和,完全匹配你给出的示例要求
如果不需要保留日期列的日期类型,计算完成后可以再转回字符串格式:
df['ColB'] = df['ColB'].dt.strftime('%m/%d/%Y')
内容的提问来源于stack exchange,提问作者dmd7
相关产品推荐
相关产品推荐

