pandas如何按列分组后根据分组数值筛选dataframe数据
pandas 按分组条件筛选全量行实现方法
你可以用以下两种常用方案实现需求:
方案1:groupby + transform 一步过滤
对每个id分组判断是否存在大于3的value值,生成布尔掩码后直接筛选原数据:
import pandas as pd # 示例数据构造,你可以替换成自己的df df = pd.DataFrame({ 'id': ['a1','a1','a1','a1','a2','a2','a3','a3','a3','a3','a3','a3'], 'value': [0,1,2,3,0,1,0,1,2,3,4,5] }) # 核心筛选代码 res = df[df.groupby('id')['value'].transform(lambda x: (x>3).any())]
方案2:先拿合法ID再匹配(大数据量更推荐)
先提取所有符合条件的id列表,再用isin匹配原数据的行,性能比方案1更高:
# 筛选出分组内value最大值大于3的id valid_ids = df.groupby('id')['value'].max().loc[lambda x: x>3].index # 过滤原数据 res = df[df['id'].isin(valid_ids)]
两种方案输出的结果都和你预期的一致。
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

