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

如何使用Dask判断用户是否连续对同一广告系列及广告进行浏览和点击

使用Dask判断用户连续执行view/click操作的实现方案

核心思路

按user_id、campaignId、adId组合分组,对每组内的记录按时间戳升序排序,通过对比相邻记录的action字段,判断是否存在连续的view后接click(或双向操作,可按需调整)的行为。

具体步骤与代码

1. 导入依赖并加载数据

import dask.dataframe as dd
import pandas as pd

# 方式1:从CSV文件读取数据(替换为实际文件路径)
df = dd.read_csv(
    "your_data.csv",
    parse_dates=["timestamp"],
    dtype={
        "user_id": "string",
        "action": "string",
        "adId": "string",
        "campaignId": "string"
    }
)

# 方式2:直接构造示例数据的Dask DataFrame
data = [
    ("2016-09-21 22:11:00", "7c74953c-66cc-48bd-9d02-a02bf039cf3f", "click", "adId_09", "campaignId_01"),
    ("2016-06-25 18:29:00", "676a083e-2f8e-4ff2-9ec2-270f7f9d6033", "view", "adId_09", "campaignId_02"),
    ("2016-02-14 19:03:00", "77158997-0dfa-48b7-9149-973dc151ef8d", "click", "adId_02", "campaignId_02"),
    ("2016-03-26 06:27:00", "78aa2467-b502-413b-94e9-04ec8210bd13", "click", "adId_07", "campaignId_03")
]
df = dd.from_pandas(pd.DataFrame(data, columns=["timestamp", "user_id", "action", "adId", "campaignId"]), npartitions=1)

2. 分组排序并生成连续操作判断字段

# 按用户、广告活动、广告ID分组,组内按时间戳排序
sorted_df = df.groupby(["user_id", "campaignId", "adId"]).apply(
    lambda x: x.sort_values("timestamp"),
    meta=df._meta
)

# 获取上一条记录的action字段
sorted_df["prev_action"] = sorted_df.groupby(["user_id", "campaignId", "adId"])["action"].shift(1)

# 判断是否存在「view→click」的连续操作
sorted_df["is_continuous_view_click"] = (sorted_df["prev_action"] == "view") & (sorted_df["action"] == "click")

# 若需要判断双向连续(click→view也算),可替换为:
# sorted_df["is_continuous_action_pair"] = (
#     (sorted_df["prev_action"] == "view") & (sorted_df["action"] == "click")
# ) | (
#     (sorted_df["prev_action"] == "click") & (sorted_df["action"] == "view")
# )

3. 计算并查看结果

# 触发Dask计算,获取结果DataFrame
result = sorted_df.compute()

# 筛选出存在目标连续操作的记录
continuous_records = result[result["is_continuous_view_click"]]
print(continuous_records)

关键说明

  • 分组逻辑:必须同时按user_id、campaignId、adId分组,确保仅对比同一用户对同一广告活动下同一广告的操作序列。
  • 排序必要性:只有按时间戳排序后,shift获取的相邻记录才对应时间上的连续操作。
  • meta参数:groupby.apply中指定meta是为了让Dask明确输出数据结构,避免计算过程中出现类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:50:26