如何在Pandas中标记指定列组合是否唯一?
问题:为DataFrame添加判断组合唯一性的列
给定如下DataFrame:
import pandas as pd data = {'name': ['Tom', 'nick', 'krish', 'jack','Tom','Tom'], 'surname': ['smith', 'nielsen', 'hawk', 'boxer','bless','smith'], 'job': ['boxer', 'writer', 'officer', 'driver','barman','boxer'], 'salary': [200, 100, 300, 200,500,1000], } df = pd.DataFrame(data)
需要添加名为is only的新列:当name、surname、job三列的取值组合唯一时,列值为true;若组合重复则为false,最终期望输出如下:
name surname job salary is only 0 Tom smith boxer 200 false 1 nick nielsen writer 100 true 2 krish hawk officer 300 true 3 jack boxer driver 200 true 4 Tom bless barman 500 true 5 Tom smith boxer 1000 false
解决方案
可以利用Pandas的duplicated()方法快速实现需求,步骤如下:
- 使用
duplicated()标记重复的组合行:指定subset参数为需要判断的三列,keep=False会将所有重复出现的组合行都标记为True - 对标记结果取反,得到唯一组合的行(标记为
True) - 将布尔值转换为小写字符串
'true'/'false',赋值给新列is only
完整代码:
# 添加新列并标记唯一性 df['is only'] = ~df.duplicated(subset=['name', 'surname', 'job'], keep=False) # 转换为目标字符串格式 df['is only'] = df['is only'].map({True: 'true', False: 'false'}) # 输出结果 print(df)
运行后即可得到符合要求的DataFrame。
内容的提问来源于stack exchange,提问作者dimzev
相关产品推荐
相关产品推荐

