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

pandas按多条件分组创建新列,基于日期差和new_id生成ns计数列

pandas 实现ns列计算方案

前置处理

首先保证两个前提:

  • 把Date列转换为pandas datetime格式,方便计算日期差
  • 按myid、Date升序排序,确保同一用户的行按时间顺序排列

实现逻辑

核心思路是把两个需要ns加1的触发条件拆解为布尔列,累加后加初始值1即可,无需创建多个冗余中间列:

  1. 条件1:同一myid分组内,当前行与前一行日期差大于30天
  2. 条件2:同一myid分组内,前一行的new_id不为空(对应规则中当前行new_id非空则下一行加1的要求)
    两个条件满足任意一个就触发加1,累加后加上初始值1就是最终的ns值。

代码实现

import pandas as pd
import numpy as np

# 日期格式转换
df['Date'] = pd.to_datetime(df['Date'], format='%d-%b-%Y')
# 按用户和日期排序,保证时间顺序正确
df = df.sort_values(['myid', 'Date']).reset_index(drop=True)

def calc_ns(group):
    # 日期差超过30天的标记
    cond1 = group['Date'].diff().dt.days > 30
    # 前一行new_id非空的标记
    cond2 = group['new_id'].shift().notna()
    # 累加触发计数+初始值1
    group['ns'] = (cond1 | cond2).cumsum() + 1
    return group

# 按myid分组应用计算逻辑
df = df.groupby('myid', group_keys=False).apply(calc_ns)

结果说明

运行后输出结果和需求的期望逻辑完全匹配,排序步骤会自动修正原始数据中可能存在的日期顺序错误问题,避免日期差计算出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:24:03