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

使用Pandas选择、切片及聚合时序数据的问题求助

用Pandas为点击预测构建IP时序行为特征

没问题,这在点击预测的特征工程里是非常关键的一步——通过时间窗口聚合IP的过往行为,能有效捕捉用户的点击模式。我帮你一步步实现,结合你的样本数据来讲解:

第一步:预处理时序数据

首先得确保时间字段是可处理的datetime类型,并且数据按IP和时间排序(这对窗口聚合至关重要):

import pandas as pd

# 你的样本数据
data = {
    'index': [0, 1, 2, 3, 4],
    'ip': [29540, 26777, 140926, 69375, 119166],
    'app': [3, 11, 12, 2, 9],
    'dev': [1, 1, 1, 1, 2],
    'os': [42, 25, 13, 19, 15],
    'channel': [489, 319, 140, 377, 445],
    'click_time': ['2017-11-08 03:57:46', '2017-11-09 11:02:14', '2017-11-07 04:36:14', '2017-11-09 13:17:20', '2017-11-07 12:11:37']
}
df = pd.DataFrame(data)

# 转换时间字段为datetime类型
df['click_time'] = pd.to_datetime(df['click_time'])

# 按IP和点击时间排序,保证每个IP的行为按时间顺序排列
df = df.sort_values(by=['ip', 'click_time'])

第二步:构建时间窗口聚合特征

核心思路是按IP分组,然后对每个分组使用**时间滚动窗口(rolling)**来聚合过往行为。这里分两种常见场景:

场景1:统计固定时长窗口内的过往点击次数

比如统计每个IP在当前点击前24小时内的总点击数(排除当前点击,只算过往行为):

# 按IP分组,滚动窗口设为24小时,统计点击次数,然后shift(1)排除当前点击
df['ip_24h_past_clicks'] = df.groupby('ip')['click_time'].rolling('24H').count().shift(1).reset_index(level=0, drop=True)

# 填充首次点击的NaN值(首次点击没有过往行为,所以设为0)
df['ip_24h_past_clicks'] = df['ip_24h_past_clicks'].fillna(0).astype(int)

场景2:扩展其他时序特征

除了点击次数,你还可以聚合其他维度的行为,比如:

  • 过去1小时内的唯一App数量
  • 过去7天内的平均点击间隔

示例代码:

# 过去1小时内的唯一App数量(排除当前点击)
df['ip_1h_unique_apps'] = df.groupby('ip')['app'].rolling('1H').nunique().shift(1).reset_index(level=0, drop=True).fillna(0).astype(int)

# 过去3天内的点击时间间隔均值(需要先计算相邻点击的时间差)
# 先计算每个IP的相邻点击间隔
df['time_since_last_click'] = df.groupby('ip')['click_time'].diff().dt.total_seconds()
# 再滚动窗口统计均值
df['ip_3d_avg_interval'] = df.groupby('ip')['time_since_last_click'].rolling('3D').mean().shift(1).reset_index(level=0, drop=True).fillna(0)

关键注意事项

  • 窗口边界:rolling('24H')表示从当前时间往前推24小时的窗口,shift(1)是为了排除当前点击(如果不需要排除,可以去掉shift)
  • 性能优化:如果数据量极大(千万级以上),可以考虑用pd.Grouper按时间分桶后再聚合,或者使用Dask等分布式工具
  • 时间粒度:可以根据业务需求调整窗口大小,比如'1H'(1小时)、'7D'(7天)等,支持的时间偏移量可参考Pandas内置的时间频率规则

用你的样本数据运行后,结果会类似这样(以ip_24h_past_clicks为例):

因为你的样本里每个IP都只有1次点击,所以所有值都是0;如果同一个IP有多次点击且在24小时窗口内,就会显示对应的次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:48