基于多数规则去除重复:按A列处理DataFrame的技术需求
解决按A列去重并保留多数值、移除歧义组的问题
我来帮你搞定这个需求,用Pandas就能轻松实现你的要求——按A列分组,保留每组中B出现次数最多的条目;如果组内没有绝对多数(多个值出现次数相同),就整组移除;无重复的组直接保留。
步骤1:准备数据并导入依赖
首先把你的原始数据转换成Pandas DataFrame:
import pandas as pd # 原始数据 data = { 'A': [1, 1, 1, 2, 2, 3], 'B': ['cat', 'cat', 'dog', 'llama', 'alpaca', 'donkey'] } df = pd.DataFrame(data)
步骤2:计算每组内的频次
先统计每个(A,B)组合的出现次数,明确每个组里各个值的占比:
# 统计(A,B)的出现次数 count_df = df.groupby(['A', 'B']).size().reset_index(name='count')
这一步得到的count_df如下:
| A | B | count |
|---|---|---|
| 1 | cat | 2 |
| 1 | dog | 1 |
| 2 | alpaca | 1 |
| 2 | llama | 1 |
| 3 | donkey | 1 |
步骤3:筛选出每组的最高频次条目
接下来找出每个A组里的最大频次,再筛选出达到这个频次的条目:
# 获取每个A组的最大频次 max_count_df = count_df.groupby('A')['count'].max().reset_index(name='max_count') # 合并后筛选出频次等于组内最大值的条目 filtered_df = count_df.merge(max_count_df, on='A') filtered_df = filtered_df[filtered_df['count'] == filtered_df['max_count']]
此时filtered_df包含每个组里的“候选”条目:
| A | B | count | max_count |
|---|---|---|---|
| 1 | cat | 2 | 2 |
| 2 | alpaca | 1 | 1 |
| 2 | llama | 1 | 1 |
| 3 | donkey | 1 | 1 |
步骤4:移除歧义组并得到最终结果
现在去掉那些有多个候选条目的组(比如A=2,多个值都达到最大频次),只保留每个A组只有一个候选条目的情况:
# 找出每个A组的候选条目数量,只保留数量为1的组 valid_groups = filtered_df.groupby('A').size().reset_index(name='entry_count') valid_groups = valid_groups[valid_groups['entry_count'] == 1]['A'] # 提取最终结果 final_result = filtered_df[filtered_df['A'].isin(valid_groups)][['A', 'B']]
最终结果
运行完上面的代码后,final_result就是你想要的DataFrame:
| A | B |
|---|---|
| 1 | cat |
| 3 | donkey |
这样就完美实现了需求:A=1保留出现次数最多的cat,A=2因为无多数值被移除,A=3直接保留唯一的donkey。
内容的提问来源于stack exchange,提问作者Anderlecht
相关产品推荐
相关产品推荐

