Pandas如何统计两个字段组合的复合唯一值数量
Pandas多列组合唯一值统计方法
df[['Last Name','First Name']].nunique()的默认逻辑是逐列计算单列的唯一值数量,不会对多列做组合维度的去重,因此无法得到姓氏+名字的复合唯一值结果,可通过以下任意一种方法实现需求:

方法1:拼接组合列后统计
将两列值用特殊分隔符拼接为单字段后统计唯一值,分隔符需选择不会出现在字段实际值中的字符,避免出现值拼接歧义(例如姓Li名An和姓Lia名N直接拼接结果均为LiAn,会被误判为同一组合):
# 以|为分隔符拼接两列后统计唯一值 combo_unique_cnt = df[['Last Name', 'First Name']].apply(lambda x: '|'.join(x), axis=1).nunique()
方法2:去重后统计行数(推荐,性能更好)
直接对选中的两列做整行去重,统计去重结果的总行数即可,数据量较大时执行效率远高于逐行拼接:
combo_unique_cnt = df[['Last Name', 'First Name']].drop_duplicates().shape[0]
方法3:分组统计组数
以两列为维度分组,分组的总数量就是组合唯一值的总数:
combo_unique_cnt = df.groupby(['Last Name', 'First Name']).ngroups
拓展用法
如果需要查看每个姓名组合对应的出现频次,可通过分组计数直接输出:
# 返回结果包含Last Name、First Name、count三列,count为对应组合的出现次数 combo_freq = df.groupby(['Last Name', 'First Name']).size().reset_index(name='count')
内容的提问来源于stack exchange,提问作者Kulwant
相关产品推荐
相关产品推荐

