如何按指定规则高效替换DataFrame中log_index列的值?
高效实现连续相同值块的顺序编号
核心思路
你的需求本质是对连续相同值的块进行顺序编号,而非全局唯一值映射。最高效的方式是利用pandas的向量化操作,避免Python循环,具体步骤为:
- 标记每个连续块的起始位置(当前值与前一行不同时标记为True)
- 对标记结果做累加,得到从1开始的连续编号
代码实现
import pandas as pd # 构造示例DataFrame data = {'log_index': [27,27,27,27,28,28,29,29,29,27,27,27,28,28,28]} df = pd.DataFrame(data) # 生成连续块编号 df['new_log_index'] = df['log_index'].ne(df['log_index'].shift()).cumsum() print(df)
输出结果
log_index new_log_index 0 27 1 1 27 1 2 27 1 3 27 1 4 28 2 5 28 2 6 29 3 7 29 3 8 29 3 9 27 4 10 27 4 11 27 4 12 28 5 13 28 5 14 28 5
效率说明
这种方法完全依赖pandas的底层向量化运算,没有Python层面的循环,在处理十万甚至百万级别的数据时,性能远高于自定义循环或apply方法。
内容的提问来源于stack exchange,提问作者Unistack
相关产品推荐
相关产品推荐

