如何对DataFrame的col2列按1出现位置进行分组连续值替换?
处理DataFrame分组序列替换问题
假设你的DataFrame结构类似如下示例:
import pandas as pd # 示例数据 data = {'col1': ['A','B','C','D','E','F','G'], 'col2': [1,2,3,4,1,2,3]} df = pd.DataFrame(data)
要将每组从1开始递增的col2序列替换为组的连续序号,直接用以下代码即可:
# 生成组序号:当col2为1时触发新组,累计求和得到组号 df['col2'] = (df['col2'] == 1).cumsum()
逻辑说明
df['col2'] == 1会生成一个布尔值序列,每组的起始位置(即col2=1)会被标记为True,其余位置为Falsecumsum()对这个布尔序列做累加(True等价于1,False等价于0),每遇到一个新的起始标记,累加值就加1,从而给每组分配唯一的连续序号
处理后的示例结果:
| col1 | col2 |
|---|---|
| A | 1 |
| B | 1 |
| C | 1 |
| D | 1 |
| E | 2 |
| F | 2 |
| G | 2 |
这个方法高效且适合12000行的数据集,无需循环处理,完全利用pandas的矢量化操作。
内容的提问来源于stack exchange,提问作者Marcos Oliveira
相关产品推荐
相关产品推荐

