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

如何筛选Pandas多索引DataFrame中仅含1条记录的元素

解决多索引分组后筛选仅含1条记录的组

没问题,我来帮你搞定这个需求!首先先重现一下你的DataFrame,方便后续演示:

import pandas as pd
df = pd.DataFrame([[1, 1, 2, 2, 2, 3,4,5,5,5,6,6,6,6], list('AABBBCDEEEFFFF'), [1, 2, 3, 4, 5, 6,7,8,9,10,11,12,13,14], [1, 2, 3, 4, 5, 6,7,8,9,11,12,11,11,11]]).T
df.columns = ['col1','col2','col3','col4']

接下来我会给出几种实用的方法,帮你筛选出分组后仅包含1条记录的元素:

方法一:使用groupby.filter()(最简洁)

filter方法可以直接对每个分组应用判断条件,保留符合条件的组的所有行。这里我们判断每个组的长度是否为1:

# 按col1和col2分组,筛选组内仅1条记录的行
filtered_df = df.groupby(['col1', 'col2']).filter(lambda x: len(x) == 1)

运行后得到的filtered_df就是仅包含(col1=3, col2=C)和(col1=4, col2=D)这两个组的行,这两个组正好各只有1条记录。

方法二:先计算组大小再筛选

如果你想直观看到每个组的大小,可以先通过transform把组大小添加到原DataFrame,再筛选:

# 给每行添加对应组的大小
df['group_size'] = df.groupby(['col1', 'col2'])['col1'].transform('size')
# 筛选组大小为1的行,最后删掉临时列
filtered_df = df[df['group_size'] == 1].drop('group_size', axis=1)

这种方法的好处是你可以先查看所有组的大小,再做筛选,适合需要额外确认分组情况的场景。

方法三:通过多索引直接定位

如果你想先获取那些仅含1条记录的组的索引,再用索引筛选原DataFrame,可以这么做:

# 计算每个分组的大小
group_sizes = df.groupby(['col1', 'col2']).size()
# 筛选出大小为1的组的多索引
single_row_groups = group_sizes[group_sizes == 1].index
# 用这些索引筛选原DataFrame,最后重置索引
filtered_df = df.set_index(['col1', 'col2']).loc[single_row_groups].reset_index()

这种方法更灵活,如果你需要单独处理这些组的索引,这个方案会很合适。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:12:06