如何用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
相关产品推荐
相关产品推荐

