如何计算Pandas DataFrame日期列表列内最大与最小日期的间隔天数
Pandas 日期列表天数差计算最优方案
以下是两种不同场景下的高性价比实现方式:
方案1:逐行处理(适合中小数据集,代码最简洁)
直接对每行的日期列表做日期格式转换后计算差值,逻辑清晰易维护:
import pandas as pd # 示例数据 data = [ ["Item_1", ["2020-06-01", "2020-06-02", "2020-07-05"]], ["Item_2", ["2018-04-15", "2018-04-22"]], ["Item_3", ["2016-02-15", "2016-02-22", "2016-03-05", "2016-04-01"]], ] df = pd.DataFrame(data, columns=["Item_ID", "Dates"]) # 新增天数差列 df["day_diff"] = df["Dates"].apply( lambda x: (pd.to_datetime(x).max() - pd.to_datetime(x).min()).days )
方案2:长表转换(适合十万行以上的大数据集,性能更优)
避免逐行遍历的开销,利用 Pandas 向量化运算能力提升处理速度:
# 把日期列表拆分为多行 tmp = df.explode("Dates", ignore_index=False) # 统一做日期格式转换 tmp["Dates"] = pd.to_datetime(tmp["Dates"]) # 按原索引分组计算差值,合并回原表 df = df.join( tmp.groupby(tmp.index)["Dates"].agg(lambda x: (x.max()-x.min()).days).rename("day_diff") )
注意事项
如果你的Dates列存储的已经是datetime类型而非字符串,可直接去掉pd.to_datetime()转换步骤,运算速度会更快。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

