pandas如何按照列的无重复出现模式对dataframe进行分组?
实现方案
我们可以通过遍历指定列记录已出现元素的方式生成分组标签,保证每个分组内指定列不存在重复值,完全匹配示例中的分组要求,实现代码和效果如下:
import pandas as pd df = pd.DataFrame({ 'x': ['a', 'b', 'c', 'c', 'b', 'a'], 'y': [1, 2, 3, 4, 3, 1]}) # 定义分组函数,target_col为要校验无重复的指定列 def group_by_unique_col(df, target_col='x'): group_id = 0 group_ids = [] seen = set() for val in df[target_col]: if val in seen: group_id += 1 seen = set() seen.add(val) group_ids.append(group_id) return group_ids # 生成分组标签 df['group_id'] = group_by_unique_col(df) # 按分组id输出结果 for gid, group in df.groupby('group_id'): print(f"分组{gid}:") print(group, '\n')
运行结果:
分组0: x y group_id 0 a 1 0 1 b 2 0 2 c 3 0 分组1: x y group_id 3 c 4 1 4 b 3 1 5 a 1 1
补充说明
- 调整
group_by_unique_col函数的target_col参数,即可切换校验无重复的列 - 如果需要同时校验多列组合无重复,可以把遍历的单个值替换为对应行多列组成的元组,在set中存储元组即可实现对应逻辑
内容的提问来源于stack exchange,提问作者user6018651
相关产品推荐
相关产品推荐

