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

如何在user_id窗口中为前后周期创建新增零售商条件列?

解决方法

要找出后周期(sample2)中用户的新增零售商,核心是按user_id分组,判断该用户在后周期使用的零售商是否存在于前周期(sample1)的记录中。以下是两种高效的实现方案:

方案一:利用合并(Merge)标记新增项

通过左连接后周期数据与去重后的前周期数据,根据连接结果判断是否为新增零售商:

import pandas as pd

# 前周期数据去重,保留每个用户的唯一零售商记录
sample1_unique = sample1.drop_duplicates(subset=['user_id', 'retailer'])

# 左连接后周期数据与去重后的前周期数据,添加连接标记列
merged = sample2.merge(
    sample1_unique,
    on=['user_id', 'retailer'],
    how='left',
    indicator='merge_status'
)

# 根据连接标记生成新增零售商标识:仅在后周期存在则标记为1,否则为0
sample2['is_new_retailer'] = merged['merge_status'].map({'left_only': 1, 'both': 0})

# 输出结果(与期望格式一致)
print(sample2.to_dict())

方案二:构建用户-零售商映射快速判断

先为每个用户构建前周期的零售商集合,再逐行判断后周期的零售商是否属于该集合:

import pandas as pd

# 生成{user_id: 前周期零售商集合}的字典映射
user_retailer_set = sample1.groupby('user_id')['retailer'].apply(set).to_dict()

# 逐行判断后周期零售商是否为新增
sample2['is_new_retailer'] = sample2.apply(
    lambda row: 1 if row['retailer'] not in user_retailer_set.get(row['user_id'], set()) else 0,
    axis=1
)

# 输出结果
print(sample2.to_dict())

为什么之前的方法可能失败?

  • 直接使用is_in()时如果没有按user_id分组,会错误地将所有用户的零售商混在一起判断,导致结果不准确。
  • 反连接如果没有同时基于user_id和retailer两个字段匹配,无法精准定位到某用户的新增零售商,而是会筛选出所有不在前周期的零售商(跨用户)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:54:50