pandas 分组相同赋值1然后累加
我们有这样的需求,根据A,B两列联合分组,第一个一样的key都赋值1,然后累加。当出现不一样的A,从1开始继续累加
比如
A | B |
---|---|
x | 1 |
x | 1 |
x | 2 |
y | 1 |
y | 1 |
x | 1 |
x | 2 |
y | 1 |
我想这样
A | B | C |
---|---|---|
x | 1 | 1 |
x | 1 | 1 |
x | 2 | 2 |
y | 1 | 1 |
y | 1 | 1 |
x | 1 | 1 |
x | 2 | 2 |
y | 1 | 1 |
import pandas as pddf = pd.DataFrame({'A': ['x', 'x', 'x', 'y', 'y', 'x', 'x', 'y'],'B': [ 1, 1, 2, 1, 1, 1, 2, 1]
})
print(df)
df = df.sort_values(['A','B'])
# 1. 找出 A 值变化的连续块编号
df['block'] = (df['A'] != df['A'].shift()).cumsum()# 2. 在每个 block 中对 (A, B) 编号(相同组赋相同编号,从1开始)
df['C'] = df.groupby('block').apply(lambda g: g.groupby(['A', 'B'], sort=False).ngroup() + 1).reset_index(level=0, drop=True)# 3. 删除辅助列
df = df.drop(columns='block')print(df)