Pandas DataFrame:删除value列仅含重复值的分组
按分组移除值列全重复的DataFrame分组
给定如下DataFrame:
letter value many other variables A 5 A 5 A 8 A 9 B 3 B 10 B 10 B 4 B 5 B 9 C 10 C 10 C 10 D 6 D 8 D 10 E 5 E 5 E 5 F 4 F 4
需求是按letter列分组后,删除所有value列仅含重复值(即分组内value只有一种)的分组,保留像A、B、D这类存在多个不同value的分组(哪怕分组内有重复值也没关系)。
解决方案
核心思路是判断每个分组内value的唯一值数量,只保留唯一值数量大于1的分组:
import pandas as pd # 假设你的DataFrame名为df # 计算每个letter分组的value唯一值数量,筛选出符合条件的letter valid_groups = df.groupby('letter')['value'].nunique() > 1 valid_letters = valid_groups[valid_groups].index # 过滤原DataFrame得到结果 result_df = df[df['letter'].isin(valid_letters)]
执行后得到的结果如下:
letter value many other variables A 5 A 5 A 8 A 9 B 3 B 10 B 10 B 4 B 5 B 9 D 6 D 8 D 10
为什么不用duplicated()
duplicated()是用来标记行级的重复值,直接使用会删除单个重复行,但我们的需求是判断整个分组的value是否全重复,所以用nunique()统计分组内唯一值数量的方式更精准,不会误删A、B这类包含部分重复但整体有多个不同值的分组。
内容的提问来源于stack exchange,提问作者Bonjorn
相关产品推荐
相关产品推荐

