如何仅对含2行及以上的组做DataFrame分组?或删除单行分组?
针对DataFrame分组的两种解决方案
一、仅对包含2行及以上的分组执行groupby操作
先筛选出满足行数要求的分组键,再基于这些键进行分组:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'group': ['A', 'A', 'B', 'C', 'C', 'C'], 'value': [1, 2, 3, 4, 5, 6] }) # 提取行数≥2的分组名称 valid_groups = df.groupby('group').filter(lambda x: len(x) >= 2)['group'].unique() # 仅对有效分组执行groupby grouped = df[df['group'].isin(valid_groups)].groupby('group') # 遍历验证结果 for group_name, subset in grouped: print(f"分组 {group_name}:") print(subset)
二、从已分组的DataFrame中删除仅含1行的分组
直接对已分组的对象使用filter方法,保留行数≥2的分组(filter会返回原DataFrame中符合条件的行,重新分组即可得到目标结果):
# 先完成全量分组 full_grouped = df.groupby('group') # 过滤掉仅1行的分组 filtered_df = full_grouped.filter(lambda x: len(x) >= 2) filtered_grouped = filtered_df.groupby('group') # 遍历验证结果 for group_name, subset in filtered_grouped: print(f"分组 {group_name}:") print(subset)
也可以通过遍历分组对象筛选符合条件的组:
# 提取行数≥2的分组名称 valid_group_names = [name for name, subset in full_grouped if len(subset) >= 2] # 基于有效分组名称重新分组 filtered_grouped = df[df['group'].isin(valid_group_names)].groupby('group')
内容的提问来源于stack exchange,提问作者goldie
相关产品推荐
相关产品推荐

