在原始 table 上使用 pandas 进行 groupby 后的自动增量索引

Autoincrement indexing after groupby with pandas on the original table

我无法解决 pandas 中非常 easy/simple 的问题。 :(

我有以下 table:

df = pd.DataFrame(data=dict(a=[1, 1, 1,2, 2, 3,1], b=["A", "A","B","A", "B", "A","A"]))
df

Out[96]: 
   a  b
0  1  A
1  1  A
2  1  B
3  2  A
4  2  B
5  3  A
6  1  A

我想为每个分组(按 a 和 b 列分组)的唯一项目创建递增 ID。所以结果会像这样(c 列):

Out[98]: 
   a  b  c
0  1  A  1
1  1  A  1
2  1  B  2
3  2  A  3
4  2  B  4
5  3  A  5
6  1  A  1

我试过:

df.groupby(["a", "b"]).nunique().cumsum().reset_index()

结果:

Out[105]: 
   a  b  c
0  1  A  1
1  1  B  2
2  2  A  3
3  2  B  4
4  3  A  5

不幸的是,这仅适用于按数据集分组的数据集,不适用于原始数据集。正如您在原始 table 中看到的那样,我有 7 行,按 returns 分组的只有 5.

所以有人可以帮助我如何获得所需的 table:

   a  b  c
0  1  A  1
1  1  A  1
2  1  B  2
3  2  A  3
4  2  B  4
5  3  A  5
6  1  A  1

提前致谢!

在从 (a, b) 列创建元组后使用 pd.factorize

df['c'] = pd.factorize(df[['a', 'b']].apply(tuple, axis=1))[0] + 1
print(df)

# Output
   a  b  c
0  1  A  1
1  1  A  1
2  1  B  2
3  2  A  3
4  2  B  4
5  3  A  5
6  1  A  1

groupby + ngroup

df['c'] = df.groupby(['a', 'b']).ngroup() + 1

   a  b  c
0  1  A  1
1  1  A  1
2  1  B  2
3  2  A  3
4  2  B  4
5  3  A  5
6  1  A  1