如何高效为pandas DataFrame重复列值生成历史出现次数计数列
高效实现方案
pandas 提供了原生的向量化方法来实现这个需求,仅需一行代码即可完成,效率远高于手动遍历iterrows:
import pandas as pd data = {'1':[1, 1, 1, 2, 2, 3, 4, 4, 4, 4]} df = pd.DataFrame(data) # 直接生成分组序号,完全匹配需求 df['uniquee'] = df.groupby('1').cumcount()
方案说明
groupby('1')会将1列取值相同的行划分为同一个分组cumcount()方法会保留原表的行顺序,对每个分组内的行从0开始依次生成序号,正好匹配「统计当前行对应值此前出现次数」的需求:第一次出现计数为0,第二次为1,以此类推,运行结果和你给出的预期结果完全一致。
效率优势
- 底层为C实现的向量化运算,不需要逐行遍历Python对象,对于10万行以上的数据集,运算速度比
iterrows实现快100~1000倍,数据量越大性能优势越明显。 - 代码简洁易维护,不需要手动维护计数字典和逐行赋值。
内容的提问来源于stack exchange,提问作者SantoshGupta7
相关产品推荐
相关产品推荐

