如何为分组后的DataFrame创建标识Location唯一性的布尔列
为分组后的DataFrame添加唯一性判断列
需求说明
为分组后的DataFrame创建布尔列Unique,规则是:在每个分组子集中,若Location值仅出现一次则为True,否则为False。
原数据与修正后的分组代码
注意:原代码中groupby的Name列不存在,实际应为ID列,修正后的代码如下:
import pandas as pd dataset = { 'ID': ['One', 'One', 'One', 'Five', 'Five','Five','Four'], 'Day': [2, 2, 2, 1, 1,1,0], 'Location': ['London', 'London', 'Paris', 'London', 'Paris','Paris','Berlin']} df = pd.DataFrame(dataset) # 按ID和Day分组 df_grouped = df.groupby(['ID','Day'])
解决方案
推荐两种简洁实现方式:
方法1:利用duplicated取反(更高效)
# 标记分组内所有重复的Location行,取反后得到唯一性判断 df['Unique'] = ~df_grouped['Location'].duplicated(keep=False)
方法2:结合transform与value_counts
# 计算每个分组内Location值的出现次数,判断是否等于1 df['Unique'] = df_grouped['Location'].transform(lambda x: x.map(x.value_counts()) == 1)
验证结果
执行后df['Unique']的输出与预期一致:
0 False 1 False 2 True 3 True 4 False 5 False 6 True Name: Unique, dtype: bool
内容的提问来源于stack exchange,提问作者the phoenix
相关产品推荐
相关产品推荐

