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

Pandas按personal_id计算application_id间的创建时间天数差

解决方案

核心思路是先提取每个用户(personal_id)下每个申请(application_id)的唯一时间戳,计算完间隔后再合并回原数据集,避免同一申请内多行数据干扰计算。

步骤说明

  • 第一步:提取每个personal_id+application_id对应的唯一时间戳,生成中间数据集(每个申请仅保留一行)
  • 第二步:按用户分组,对申请按时间排序后计算连续申请的天数间隔
  • 第三步:将计算好的间隔值合并回原DataFrame,确保同一申请的所有行值一致

代码实现

假设你的原DataFrame名为df,且creation_timestamp已转为datetime类型(若未转换需先执行转换代码):

import pandas as pd

# 确保时间列是datetime类型(如果还不是的话)
df['creation_timestamp'] = pd.to_datetime(df['creation_timestamp'])

# 1. 提取每个用户+申请的唯一时间戳
unique_applications = df.groupby(['personal_id', 'application_id'])['creation_timestamp'].first().reset_index()

# 2. 按用户分组,按时间排序后计算连续申请的天数间隔
unique_applications = unique_applications.sort_values(['personal_id', 'creation_timestamp'])
unique_applications['days_between_applications'] = unique_applications.groupby('personal_id')['creation_timestamp'].diff().dt.days

# 3. 将间隔值合并回原DataFrame
df = df.merge(
    unique_applications[['personal_id', 'application_id', 'days_between_applications']],
    on=['personal_id', 'application_id'],
    how='left'
)

问题根源解释

你之前直接在原DataFrame上分组计算差值时,同一application_id下的多行数据时间戳相同,diff()会生成0.0;而跨申请的行才会得到正确的间隔值,导致同一申请内出现两种结果。通过先去重每个申请的唯一时间,再计算间隔,就能彻底避免这个问题。

补充调整

  • 第一个申请的days_between_applications会是NaN,你可以根据需求用fillna(0)填充为0,或者保留NaN表示无前置申请
  • 如果你的数据中存在特殊关联逻辑(比如同一application_id对应多个personal_id),可在分组和合并时调整对应字段

内容的提问来源于stack exchange,提问作者Alex Günsberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:12:40