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

Pandas DataFrame分组过滤:筛选无主账户的用户分组

如何在Pandas中过滤掉包含特定条件的分组

你想要按User分组后,仅保留**没有任何主账户(即组内无primary为yes的行)**的用户的所有数据,这里有两种高效的实现方式:

方法一:使用groupby.filter()直接过滤分组

groupby.filter()方法可以直接对每个分组应用判断条件,只保留符合条件的分组数据,代码如下:

import pandas as pd

# 读取你的数据
df = pd.read_csv("accounts_test.csv")

# 按User分组,过滤掉组内存在primary="yes"的分组
filtered_df = df.groupby('User').filter(lambda group: (group['primary'] != 'yes').all())

# 查看结果
print(filtered_df)

代码解释:

  • lambda group: (group['primary'] != 'yes').all():对每个分组group进行判断,检查该分组中所有行的primary都不等于yes(因为NaN != 'yes'会返回True,所以不会影响判断)。
  • 只有满足这个条件的分组,其所有行才会被保留到最终的filtered_df中。

方法二:先筛选符合条件的用户,再提取数据

如果你想更清晰地看到哪些用户符合条件,可以先筛选出目标用户列表,再从原DataFrame中提取对应数据:

import pandas as pd

df = pd.read_csv("accounts_test.csv")

# 计算每个User是否满足“无主账户”的条件
user_validity = df.groupby('User').apply(lambda group: (group['primary'] != 'yes').all())

# 提取符合条件的User ID
valid_users = user_validity[user_validity].index

# 筛选出这些User的所有数据
filtered_df = df[df['User'].isin(valid_users)]

print(filtered_df)

代码解释:

  1. 第一步通过groupby.apply()得到每个用户的有效性标记(True表示该用户无主账户);
  2. 第二步从标记中提取出True对应的User ID;
  3. 最后用isin()筛选原DataFrame中属于这些User的所有行。

两种方法最终都会得到你期望的输出:

User primary account_type
3     2    NaN   current_acc
4     2    NaN        invest
5     2    NaN        savings
9     4    NaN        savings
10    4    NaN        invest
11    4    NaN   current_acc

内容的提问来源于stack exchange,提问作者jonathan müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:53:11