如何基于DataFrame的column1生成分组递增计数新列且保留column2
实现DataFrame按分组生成组内序号的方案
你担心groupby丢失column2数据的顾虑是多余的,pandas的groupby执行组内序列生成操作时不会修改、删除非分组列的数据,以下是具体实现方案:
推荐方案:groupby + cumcount(简洁高效)
该方案严格保留原始行顺序,不会改动column2的任何数据,仅新增需要的column3列:
import pandas as pd # 构造示例DataFrame,你可以替换为自己的数据源 data = { "column1": ["x","x","x","y","y","y","y","z","c","c"], "column2": ["X22","X26","X287","X26","X22","X287","X26","X27","X29","X22"] } df = pd.DataFrame(data) # 核心实现逻辑:按column1分组,组内从0开始计数后加1得到从1开始的序号 # sort=False严格保留分组的原始出现顺序,避免序号错乱 df["column3"] = df.groupby("column1", sort=False).cumcount() + 1
替代方案:手动遍历计数(无需groupby)
如果不想使用groupby,也可以通过字典记录每个分组的出现次数,遍历生成序号:
count_map = {} column3_list = [] for group_val in df["column1"]: # 分组值不存在则初始化为0,每次累加1 count_map[group_val] = count_map.get(group_val, 0) + 1 column3_list.append(count_map[group_val]) df["column3"] = column3_list
两种方法输出的结果和你预期的完全一致,column2的所有数据都会完整保留。
内容的提问来源于stack exchange,提问作者Tmiskiewicz
相关产品推荐
相关产品推荐

