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

如何用Pandas筛选并统计两类ID:仅含Purchased=1及值变化的ID

示例数据集

IDPurchased
1000
1001
1000
1001
1011
1011
1011
1011
1020
1020
1020
1020
1031
1031
1031
1031
1040
1041
1040
1041
Pandas 定位并统计目标ID的解决方案

一、统计Purchased值仅为1的ID

用groupby结合all()或nunique()就能实现:

方法1:用all()判断组内所有值都是1

# 筛选组内所有Purchased都是1的ID
only_1_ids = df.groupby('ID')['Purchased'].all()
# 提取符合条件的ID列表
only_1_ids = only_1_ids[only_1_ids].index.tolist()
print("Purchased仅为1的ID:", only_1_ids)
# 统计数量
print("数量:", len(only_1_ids))

方法2:用nunique()判断组内唯一值只有1

# 获取每个ID对应的Purchased唯一值集合
id_unique_vals = df.groupby('ID')['Purchased'].unique()
# 筛选唯一值仅为[1]的ID
only_1_ids = id_unique_vals[id_unique_vals.apply(lambda x: len(x)==1 and x[0]==1)].index.tolist()

二、统计Purchased二进制值发生变化的ID

这类ID的核心特征是组内同时存在0和1,或者相邻行数值有切换。你之前用diff()的思路没问题,只是需要进一步判断组内是否存在变化,这里提供两种更直接的方法:

方法1:基于diff()判断组内有非0差值

# 计算组内相邻行的Purchased差值
df['diff'] = df.groupby('ID')['Purchased'].diff()
# 筛选组内存在非空且非0差值的ID(即出现过值变化)
changed_ids = df.groupby('ID')['diff'].apply(lambda x: (x.notna() & (x != 0)).any()).index.tolist()
print("Purchased值发生变化的ID:", changed_ids)
print("数量:", len(changed_ids))

方法2:直接判断组内唯一值数量大于1(更简洁)

因为二进制值变化意味着组内至少有0和1两种值,直接用nunique()判断即可:

changed_ids = df.groupby('ID')['Purchased'].nunique()
changed_ids = changed_ids[changed_ids > 1].index.tolist()

完整可运行代码

import pandas as pd

# 构造示例DataFrame
data = {
    'ID': [100,100,100,100,101,101,101,101,102,102,102,102,103,103,103,103,104,104,104,104],
    'Purchased': [0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0,1,0,1]
}
df = pd.DataFrame(data)

# 统计Purchased仅为1的ID
only_1_ids = df.groupby('ID')['Purchased'].all()[lambda x: x].index.tolist()
print(f"Purchased仅为1的ID:{only_1_ids},共{len(only_1_ids)}个")

# 统计Purchased值发生变化的ID
changed_ids = df.groupby('ID')['Purchased'].nunique()[lambda x: x>1].index.tolist()
print(f"Purchased值发生变化的ID:{changed_ids},共{len(changed_ids)}个")

运行结果:

Purchased仅为1的ID:[101, 103],共2个
Purchased值发生变化的ID:[100, 104],共2个

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:15:57