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

Pandas如何按姓名、供应商分组对连续日期数值求和并新增列

要实现同姓名、同供应商分组下连续日期的Amount求和,可按以下步骤操作:

步骤1:日期格式转换

先把Date列转为pandas支持的datetime格式,才能计算日期间隔:

import pandas as pd
# 示例DataFrame
df = pd.DataFrame({'Name': ['A', 'A', 'A','A','B','B','C','C','C','C','C','C','C','C','C'],
  'Supplier': ['Wal', 'Wal', 'Wal', 'Wal', 'Co', 'Co', 'Mc', 'Mc', 'St', 'St', 'St', 'St', 'St', 'To', 'To'],
  'Date': ['2021-05-31', '2021-06-01', '2021-06-08', '2021-06-09', '2021-05-17', '2021-05-18'
          , '2021-04-07', '2021-04-08', '2021-05-11', '2021-05-12', '2021-05-13', '2021-05-18'
          , '2021-05-19', '2021-03-30', '2021-03-31'],
  'Amount': [27, 400, 410, 250, 100, 50, 22, 78, 60, 180, 100, 240, 140, 30, 110],
  'Summation': [427,427,660,660,150,150,100,100,340,340,340,380,380,140,140 ]})

# 转换日期格式
df['Date'] = pd.to_datetime(df['Date'])

步骤2:生成连续日期段标记

按姓名、供应商分组后,计算每行日期和上一行的间隔,间隔不等于1天就标记为新的连续段,用累计求和生成每个连续段的唯一标识:

df['continue_group'] = df.groupby(['Name', 'Supplier'])['Date'].diff().dt.days.ne(1).cumsum()

步骤3:分组求和生成结果列

按姓名、供应商、连续段标识三个维度分组,对Amount求和后用transform方法把结果同步到同组的每一行:

df['new_summation'] = df.groupby(['Name', 'Supplier', 'continue_group'])['Amount'].transform('sum')

可选:清理临时列

如果不需要刚才生成的连续段标记列,可以直接删除:

df = df.drop('continue_group', axis=1)

最终得到的new_summation列和示例中的Summation列结果完全一致,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:06