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

如何在Python的DataFrame中基于列值生成重复行并枚举/计算

SAS转Python:基于列值分组生成枚举列与日期差列

原始数据结构

IDTYPEDATE
1A20200101
1B20200103
2A20200105
2A20200107
2B20200108

期望输出要求

需新增两个列:

  • SEQ:同一ID+TYPE组合内的行号,从1开始递增
  • DIFF:当前行DATE与对应ID下TYPE=A的最小DATE的天数差

Python(Pandas)实现代码

import pandas as pd

# 读取并预处理数据(根据实际数据源调整读取方式)
df = pd.read_csv('your_data.csv')
# 将DATE列转为标准日期格式
df['DATE'] = pd.to_datetime(df['DATE'], format='%Y%m%d')

# 生成SEQ列:按ID和TYPE分组计数
df['SEQ'] = df.groupby(['ID', 'TYPE']).cumcount() + 1

# 生成DIFF列:先获取每个ID的TYPE=A基准日期,再计算天数差
base_dates = df[df['TYPE'] == 'A'].groupby('ID')['DATE'].min().reset_index(name='BASE_DATE')
df = df.merge(base_dates, on='ID', how='left')
df['DIFF'] = (df['DATE'] - df['BASE_DATE']).dt.days
# 可选:删除临时基准日期列
df.drop('BASE_DATE', axis=1, inplace=True)

# 查看最终结果
print(df)

关键逻辑说明

  • groupby(['ID', 'TYPE']).cumcount() +1:针对每个ID和TYPE的组合分组,从0开始的计数加1后得到从1起始的序列编号。
  • 基准日期提取:先筛选TYPE=A的行,按ID分组取最小DATE,再通过merge将基准日期匹配到对应ID的所有行。
  • 日期差计算:利用Pandas日期类型的减法特性,dt.days将时间差转换为整数天数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:15:34