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

如何用Python Pandas将CSV同ID多日期值存为变量/列表并比较

解决方案

核心步骤:按ID分组获取日期列表

用Pandas的groupby可以高效实现按ID聚合日期,同时用内置日期转换函数替代手动拆分字符串,代码更简洁高效:

import pandas as pd

filename = 'TestData.csv'
df = pd.read_csv(filename)

# 1. 将DATE列转换为datetime格式(适配日/月/年的输入格式,设置dayfirst=True)
df['DATE'] = pd.to_datetime(df['DATE'], dayfirst=True)

# 2. 按ID分组,提取每个ID对应的所有日期列表,转成字典方便后续调用
id_dates = df.groupby('ID')['DATE'].agg(list).to_dict()

# 输出结果:键为ID,值为该ID对应的日期列表
print(id_dates)

运行后会得到如下格式的字典:

{
  1: [Timestamp('2011-11-11 00:00:00'), Timestamp('2011-11-11 00:00:00')],
  2: [Timestamp('2011-05-05 00:00:00'), Timestamp('2011-06-20 00:00:00')],
  3: [Timestamp('2011-04-02 00:00:00'), Timestamp('2011-08-10 00:00:00')],
  4: [Timestamp('2011-12-08 00:00:00'), Timestamp('2012-02-01 00:00:00'), Timestamp('2012-03-12 00:00:00')]
}

后续日期比较标记参考

如果要标记同一ID下日期间隔超过设定时长的行,可以用transform实现向量化处理,避免手动循环:

# 设定日期间隔阈值(示例为30天)
threshold_days = 30

# 对每个ID的日期,计算与该ID最早日期的间隔,超过阈值则标记为1
df['FLAG'] = df.groupby('ID')['DATE'].transform(
    lambda x: (x - x.min()).dt.days > threshold_days
).astype(int)

print(df)

为什么不用手动循环?

Pandas的向量化操作(groupby、transform)比逐行循环效率高数十倍,尤其处理大型数据集时优势明显,同时代码更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:15