如何按多列匹配条件对DataFrame分组并为同组打统一标签
Pandas DataFrame分组打标签实现方案
直接使用Pandas原生分组方法即可实现需求,代码逻辑如下:
import pandas as pd # 假设你的原始数据存放在df变量中 # 1. 定义用于分组匹配的字段 match_cols = ['l_name', 'f_name', 'city_state', 'zip'] # 2. 筛选出行数>=2的分组,给符合条件的分组分配从1开始的递增标签 valid_group_tags = df.groupby(match_cols)\ .filter(lambda x: len(x) >= 2)\ .groupby(match_cols)\ .ngroup() + 1 # 3. 将标签映射回原表,无匹配分组自动填充为0 df['tag'] = df.set_index(match_cols).index.map(valid_group_tags).fillna(0).astype(int)
逻辑说明
- 先按指定4个字段分组,过滤掉只有1行的分组,剩下的都是需要打标签的有效分组
- 用
ngroup()方法给有效分组分配从0开始的编号,加1后就从1开始计数 - 把标签映射回原DataFrame时,没有匹配到的分组(即只有1行的分组)会得到NaN值,填充为0即可符合要求
- 整个过程基于Pandas原生接口实现,不需要自定义循环,处理百万级数据也能保持较好性能
内容的提问来源于stack exchange,提问作者CodingStark
相关产品推荐
相关产品推荐

