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

如何用Pandas统计存在非发布浏览职位的唯一account_id数量

问题描述

我有一个包含account_id、viewed_job_id和posted_job_id列的Pandas DataFrame,每行数据唯一,但同一个account_id会出现在多行中。需要统计满足存在至少一个viewed_job_id不在该账户所有posted_job_id集合中的唯一account_id数量。

示例数据

account_idviewed_job_idposted_job_id
a_1j_1j_2
a_1j_2j_1
a_2j_1j_4
a_2j_3j_1
a_3j_2j_3
a_3j_3j_3

示例结果:满足条件的账户为a_2和a_3,最终统计数量为2。

解决方案

实现步骤

  1. 按account_id分组,分别提取每个账户的所有viewed_job_id和posted_job_id并去重为集合
  2. 检查每个账户的浏览岗位集合是否不完全包含在发布岗位集合中(即存在至少一个浏览岗位不在发布岗位里)
  3. 统计满足条件的账户总数

代码实现

import pandas as pd

# 构造示例DataFrame(实际使用时替换为你的数据)
df = pd.DataFrame({
    'account_id': ['a_1', 'a_1', 'a_2', 'a_2', 'a_3', 'a_3'],
    'viewed_job_id': ['j_1', 'j_2', 'j_1', 'j_3', 'j_2', 'j_3'],
    'posted_job_id': ['j_2', 'j_1', 'j_4', 'j_1', 'j_3', 'j_3']
})

# 分组聚合得到每个账户的岗位集合
account_job_sets = df.groupby('account_id').agg(
    viewed=('viewed_job_id', set),
    posted=('posted_job_id', set)
)

# 判断每个账户是否符合条件
account_job_sets['is_valid'] = account_job_sets.apply(
    lambda row: not row['viewed'].issubset(row['posted']),
    axis=1
)

# 统计符合条件的账户数量
valid_account_count = account_job_sets['is_valid'].sum()
print(valid_account_count)  # 输出:2

代码说明

  • groupby('account_id').agg(...):通过分组聚合,用set自动去重,得到每个账户的所有浏览岗位和发布岗位集合
  • row['viewed'].issubset(row['posted']):判断浏览岗位是否全在发布岗位里,取反后就表示存在至少一个浏览岗位不在发布岗位集合中
  • sum():布尔值求和时,True会被当作1,False当作0,直接得到满足条件的账户数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:44:54