Pandas 高效获取对应另一列存在至少2个不同值的Name列值的方法
高效实现方案
核心思路是使用pandas原生的groupby+nunique向量化运算,避免Python层的循环遍历,底层基于C实现,在大数据集下性能远高于自行编写的for循环校验逻辑。
示例代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({'Name':['A','A','A','B','C','C','D','D'], 'Value':["6","2","1","1","2","2","3","2"]}) # 按Name分组,统计每个Name对应的Value唯一值数量,筛选出数量>=2的Name,转为列表 result = df.groupby('Name')['Value'].nunique()[lambda x: x >= 2].index.tolist() print(result)
输出结果
['A', 'D']
补充优化方案
如果你的数据集里单Name存在大量重复的Value条目,可以先做去重预处理再分组统计,进一步降低聚合计算量:
# 先按Name+Value去重,再统计每个Name的条目数,筛选条目数>=2的Name result = df.drop_duplicates(['Name','Value']).groupby('Name').size()[lambda x: x>=2].index.tolist()
内容的提问来源于stack exchange,提问作者Ewdlam
相关产品推荐
相关产品推荐

