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

如何在Pandas DataFrame中保留含指定值的分组并移除无该值分组

按分组筛选含特定值的Pandas DataFrame最优实现

问题场景

给定以下DataFrame:

import pandas as pd
d = {'value1': [1, 1, 1, 2, 3, 3, 4, 4, 4, 4], 'value2': ['A', 'B', 'C', 'C', 'A', 'B', 'B', 'A', 'A', 'B']}
df = pd.DataFrame(data=d)

原始数据:

value1  value2
0        1       A
1        1       B
2        1       C
3        2       C
4        3       A
5        3       B
6        4       B
7        4       A
8        4       A
9        4       B

需求:按value1分组,仅保留那些value2列中至少包含一个'C'的分组。

最优实现方法

方法一:向量式筛选(大数据集首选)

先提取所有包含'C'的value1取值,再过滤整个DataFrame,性能最优:

# 获取所有符合条件的value1值
valid_groups = df.loc[df['value2'] == 'C', 'value1'].unique()
# 过滤得到结果
result = df[df['value1'].isin(valid_groups)]

这种方法利用Pandas的向量操作,避免了逐组遍历,在数据量较大时效率远高于分组处理。

方法二:groupby + transform(直观高效)

通过transform将分组的判断结果广播到每一行,再做布尔索引:

# 标记每行所在分组是否包含'C'
has_c = df.groupby('value1')['value2'].transform(lambda x: 'C' in x.values)
# 筛选符合条件的行
result = df[has_c]

代码逻辑清晰,兼顾可读性和效率,适合中等规模数据集。

方法三:groupby + filter(代码最简洁)

直接用filter方法保留符合条件的分组:

result = df.groupby('value1').filter(lambda x: 'C' in x['value2'].values)

代码最简洁,但由于是逐组执行lambda,大数据集下性能不如前两种方法,适合小规模数据快速实现。

结果验证

执行上述任意方法后,得到的结果均为:

value1  value2
0        1       A
1        1       B
2        1       C
3        2       C

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:55:18