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

基于前后索引的日期存在性创建DataFrame新列

Pandas简洁实现方案

核心思路是先预存每个索引对应的日期集合,再通过移位操作获取前后索引的日期集合,最后逐行判断日期的存在情况并求和得到目标值:

  1. 提取每个索引对应的日期集合
    先按索引分组,把每个索引下的Date列转成集合,方便后续快速判断成员关系:

    date_sets = df.groupby(level=0)['Date'].agg(set)
    
  2. 生成前后索引的日期集合映射
    利用shift操作分别获取前一个、后一个索引的日期集合,再映射回原DataFrame:

    df['prev_dates'] = df.index.map(date_sets.shift(1))
    df['next_dates'] = df.index.map(date_sets.shift(-1))
    
  3. 计算目标列
    把日期是否存在于前后集合的布尔值转为整数后相加,直接得到0/1/2的结果:

    df['result'] = df.apply(
        lambda x: int(x['Date'] in x['prev_dates']) + int(x['Date'] in x['next_dates']),
        axis=1
    )
    
  4. 可选:清理临时列
    如果不需要临时的prev_dates和next_dates列,可以直接删除:

    df = df.drop(['prev_dates', 'next_dates'], axis=1)
    

更简洁的链式写法

可以把步骤整合,避免生成临时列:

date_sets = df.groupby(level=0)['Date'].agg(set)
df['result'] = (
    df.index.map(date_sets.shift(1)).apply(lambda s: df['Date'].isin(s))
    + df.index.map(date_sets.shift(-1)).apply(lambda s: df['Date'].isin(s))
).astype(int)

这个方案完全遵循Pandas的向量化和分组操作风格,避免了循环,效率较高,同时逻辑清晰易读。

内容的提问来源于stack exchange,提问作者Dante van der Heijden

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:15:33