如何按oldID分组为Pandas DataFrame创建从1开始的newID列
解决方案
从你给出的期望结果来看,实际编号规则和描述的“按oldID分组编号”有差异——同一oldID下部分行编号相同,部分行编号递增。反推规则应为:
- 初始编号从1开始
- 若当前行的STATUS以
Status2开头,或是Statuse,则继承上一行的编号 - 其他情况,编号在上一行基础上加1
针对大数据量,这个方案用向量运算实现,效率极高,无需groupby或合并操作:
import pandas as pd # 读取分号分隔的数据 df = pd.read_csv('your_file.csv', sep=';') # 标记哪些行需要继承上一行的编号 df['need_inherit'] = df['STATUS'].str.startswith('Status2') | (df['STATUS'] == 'Statuse') # 生成newID:对不需要继承的行做累加,得到连续编号 df['newID'] = (~df['need_inherit']).cumsum() # 可选:删除辅助列 df = df.drop('need_inherit', axis=1)
如果你确实需要严格按唯一oldID分组分配连续编号(同一oldID下所有行编号相同),用ngroup更高效,处理百万级数据毫无压力:
import pandas as pd df = pd.read_csv('your_file.csv', sep=';') # 按oldID分组,生成从1开始的连续编号 df['newID'] = df.groupby('oldID').ngroup() + 1
内容的提问来源于stack exchange,提问作者PSt
相关产品推荐
相关产品推荐

