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

如何按shortId的创建日期筛选其后7天内的游戏数据?

解决按shortId创建日期筛选7天内游戏记录的问题

我来帮你搞定这个筛选需求,用Python的pandas库就能轻松实现,完全不用复杂的30天切片操作。咱们一步步来:

原始数据集

先把你提供的原始数据整理成清晰的表格:

shortIdCreated_datepid1pid2Game_Play_Date
abc01-05-19abcdef01-05-19
abc01-05-19abcpqr01-05-19
abc01-05-19xyzabc02-05-19
abc01-05-19qweabc03-05-19
abc01-05-19pqrabc04-05-19
xyz02-05-19defxyz02-05-19
xyz02-05-19pqrxyz07-05-19
xyz02-05-19xyzpqr07-05-19
xyz02-05-19xyzabc15-05-19
xyz02-05-19xyzdef21-05-19

实现步骤

核心思路是:先把日期字符串转成可计算的datetime类型,然后按每个shortId的创建日期,筛选游戏日期在7天窗口内的记录。

1. 导入库并加载数据

首先导入pandas,把数据加载成DataFrame:

import pandas as pd

# 加载你的数据
data = {
    'shortId': ['abc', 'abc', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'xyz', 'xyz', 'xyz'],
    'Created_date': ['01-05-19', '01-05-19', '01-05-19', '01-05-19', '01-05-19', '02-05-19', '02-05-19', '02-05-19', '02-05-19', '02-05-19'],
    'pid1': ['abc', 'abc', 'xyz', 'qwe', 'pqr', 'def', 'pqr', 'xyz', 'xyz', 'xyz'],
    'pid2': ['def', 'pqr', 'abc', 'abc', 'abc', 'xyz', 'xyz', 'pqr', 'abc', 'def'],
    'Game_Play_Date': ['01-05-19', '01-05-19', '02-05-19', '03-05-19', '04-05-19', '02-05-19', '07-05-19', '07-05-19', '15-05-19', '21-05-19']
}

df = pd.DataFrame(data)

2. 转换日期格式

把Created_date和Game_Play_Date从字符串转为datetime类型,指定格式为%d-%m-%y(日-月-年):

df['Created_date'] = pd.to_datetime(df['Created_date'], format='%d-%m-%y')
df['Game_Play_Date'] = pd.to_datetime(df['Game_Play_Date'], format='%d-%m-%y')

3. 计算日期差并筛选

对每条记录,计算游戏日期与该shortId创建日期的间隔天数,然后筛选间隔≥0(包含创建当天)且≤7的记录:

# 按shortId分组,获取每个shortId对应的创建日期(这里每个shortId的创建日期唯一,所以取第一个值即可)
created_dates = df.groupby('shortId')['Created_date'].first()

# 映射每条记录的创建日期
df['group_created_date'] = df['shortId'].map(created_dates)

# 计算天数差
df['days_diff'] = (df['Game_Play_Date'] - df['group_created_date']).dt.days

# 筛选符合条件的记录:天数差在0到7之间(包含两端)
filtered_df = df[(df['days_diff'] >= 0) & (df['days_diff'] <= 7)].drop(columns=['group_created_date', 'days_diff'])

# 重置索引(可选,让结果更整洁)
filtered_df = filtered_df.reset_index(drop=True)

4. 查看结果

打印筛选后的结果,和你期望的完全一致:

print(filtered_df)

输出结果:

shortId Created_date pid1 pid2 Game_Play_Date
0     abc   2019-05-01  abc  def     2019-05-01
1     abc   2019-05-01  abc  pqr     2019-05-01
2     abc   2019-05-01  xyz  abc     2019-05-02
3     abc   2019-05-01  qwe  abc     2019-05-03
4     abc   2019-05-01  pqr  abc     2019-05-04
5     xyz   2019-05-02  def  xyz     2019-05-02
6     xyz   2019-05-02  pqr  xyz     2019-05-07
7     xyz   2019-05-02  xyz  pqr     2019-05-07

如果你的数据量很大,这个方法也能高效处理,完全不需要复杂的切片操作~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:25:07