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

如何按门店提取最近及次近DateTime,生成含NaN的新df

解决方案

你可以用pandas的分组(groupby)结合聚合方法来实现,步骤如下:

  1. 先确保「Date Time」列是datetime格式(避免字符串排序出错):
import pandas as pd

# 原始数据
data = {
    'Store': [100, 100, 100, 101, 102],
    'Date Time': ['2022-03-24 19:04:00', '2022-05-05 10:29:00', '2022-07-29 11:58:00', '2022-03-15 08:56:00', '2022-04-15 10:21:00']
}
df = pd.DataFrame(data)

# 转换日期格式
df['Date Time'] = pd.to_datetime(df['Date Time'])
  1. 按「Store」分组,分别提取每组的最近访问日期(最后一条记录)和次近访问日期(倒数第二条记录,没有则返回NaN):
# 分组聚合
result_df = df.groupby('Store')['Date Time'].agg(
    Most_Recent_Visit_Date='last',
    Previous_Visit_Date=lambda x: x.nth(-2) if len(x)>=2 else pd.NA
).reset_index()

# 调整列顺序(和目标df一致)
result_df = result_df[['Store', 'Previous_Visit_Date', 'Most_Recent_Visit_Date']]
  1. 运行后得到的result_df就是你要的目标格式:
StorePrevious_Visit_DateMost_Recent_Visit_Date
1002022-05-05 10:29:002022-07-29 11:58:00
101NaN2022-03-15 08:56:00
102NaN2022-04-15 10:21:00

补充说明

  • 用groupby分组后,last()直接取每组排序后的最后一条(也就是最新日期);
  • lambda x: x.nth(-2) if len(x)>=2 else pd.NA用来判断组内记录数,有2条及以上就取倒数第二条,否则返回空值;
  • 如果你已经提前按「Store」和「Date Time」排过序,那这个方法直接生效,不需要额外排序,因为groupby会保留原组内的顺序,或者你也可以在分组时先排序:df.sort_values(['Store', 'Date Time']).groupby('Store')['Date Time']...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:30:59