Pandas如何为按邮编分组的季度累计值新增环比增量列?
实现Pandas按邮编分组计算季度新增事件数的方法
要计算每个邮编对应季度的新增事件数,核心逻辑是同一邮编分组内,当前季度累计值减去上一季度累计值,第一个季度没有上一季度数据时新增值默认为0。
具体实现方式
方式1:单独为已有DataFrame加New列
首先保证数据按邮编、季度正序排列,再通过分组差分计算新增值:
# 按邮编和季度排序,确保时间顺序正确 df = df.sort_values(['Zipcode', 'Quarter']).reset_index(drop=True) # 计算新增列 df['New'] = df.groupby('Zipcode')['Cumulative_number'].diff().fillna(0).astype(int)
方式2:嵌入现有链式操作
可以直接把逻辑加到你生成累计值的原有代码中,无需拆分步骤:
df = (df.reindex(pd.date_range(df.columns.min(), until, freq='QS', name='Quarter'), axis=1) .ffill(axis=1) .stack() .astype(int) .reset_index(name='Cumulative_number') # 新增排序和计算新增列的逻辑即可 .sort_values(['Zipcode', 'Quarter']) .assign(New=lambda x: x.groupby('Zipcode')['Cumulative_number'].diff().fillna(0).astype(int)) )
补充说明
- 如果存在累计值统计错误导致环比回落的情况,可以加下限限制避免出现负数新增:
df['New'] = df.groupby('Zipcode')['Cumulative_number'].diff().fillna(0).clip(lower=0).astype(int) - 如果你的
Quarter字段是字符串格式且排序异常,建议先转为datetime类型再排序,保证时间顺序正确:df['Quarter'] = pd.to_datetime(df['Quarter']) - 注意你给出的原始示例中2000邮编2018 Q4的累计值写为0,属于和预期输出冲突的笔误,实际计算时请保证累计值的正确性。
内容的提问来源于stack exchange,提问作者TvCasteren
相关产品推荐
相关产品推荐

