如何对含重复game_id的pandas DataFrame按唯一值顺序重新编号?
实现方案
你要的按首次出现顺序为唯一game_id生成从1开始的连续编号,用pandas内置方法即可实现,完全不需要用到reindex相关功能:
方法1:使用factorize(性能最优)
pd.factorize会直接按照值第一次出现的顺序为唯一值分配整数编码,默认从0开始,加1即可得到你需要的编号:
import pandas as pd # 假设你的投篮数据DataFrame变量名为knicks_shots knicks_shots['game_order_id'] = pd.factorize(knicks_shots['game_id'], sort=False)[0] + 1
参数sort=False是默认值,显式标注是为了避免按game_id数值排序打乱出现顺序,确保第一个出现的0021300008对应编号1,第二个出现的0021300018对应编号2,以此类推。
方法2:使用groupby的ngroup方法
如果你更熟悉分组操作,也可以用分组编号的方式实现,效果完全一致:
knicks_shots['game_order_id'] = knicks_shots.groupby('game_id', sort=False).ngroup() + 1
结果验证
执行完后可以用下面的代码核对每个game_id对应的编号是否符合预期:
# 输出所有唯一game_id和对应的顺序编号 print(knicks_shots[['game_id', 'game_order_id']].drop_duplicates())
两种方法处理7000行数据的耗时都可以忽略,也不会修改原表的行顺序和其他字段内容。
内容的提问来源于stack exchange,提问作者darkenergy
相关产品推荐
相关产品推荐

