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

pandas如何按分组统计符合列表条件的唯一SP值数量并新增列

实现方法

你可以用以下两种pandas方案实现需求,第二种逻辑更直观、运行效率更高:

前置准备

首先导入依赖、构造示例数据:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Groups': ['G1','G1','G1','G1','G1','G1','G2','G2','G2','G2'],
    'SP': ['SP1','SP1','SP1','SP2','SP3','SP4','SP2','SP5','SP3','SP23'],
    'Letters': ['A','Z','A','X','X','B','A','B','X','A']
})
the_list = ['A','B']

方案1:groupby + transform 直接赋值

df['Nb_column'] = df.groupby('Groups')['SP'].transform(
    lambda x: x[df.loc[x.index, 'Letters'].isin(the_list)].nunique()
)

逻辑说明:对每个Groups分组的SP序列,通过索引匹配对应行的Letters值,筛选出属于the_list的部分后,统计对应SP的唯一值个数,transform会把统计值广播到当前分组的所有行。

方案2:先做分组统计再映射(推荐)

# 先筛选符合条件的行,按分组统计SP的唯一值个数,生成映射关系
count_map = df[df['Letters'].isin(the_list)].groupby('Groups')['SP'].nunique()
# 将统计值映射到原表的对应分组
df['Nb_column'] = df['Groups'].map(count_map)

逻辑说明:先过滤掉所有Letters不在目标列表里的行,直接统计每个分组的SP唯一值个数,再把结果映射回原表,避免分组内重复计算,更适合大数据量场景。

运行以上任意一种方案后,得到的df就和你给出的预期结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:27:03