根据 Pandas 中的另一列,使用 n 生成新的 w 值 1 到 n

Generating new column w value 1 to n with n depending on another column in Pandas

假设我有以下数据框

import pandas as pd  
  
df = pd.DataFrame({'a': [1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4],
                   'b': [3,4,3,7,5,9,4,2,5,6,7,8,4,2,4,5,8,0]})
    a   b
0   1   3
1   1   4
2   1   3
3   2   7
4   2   5
5   2   9
6   2   4
7   2   2
8   3   5
9   3   6
10  3   7
11  3   8
12  4   4
13  4   2
14  4   4
15  4   5
16  4   8
17  4   0

我想创建一个值为 1 到 n 的新列 c,其中 n 取决于列 a 的值,如下所示:

    a   b   c
0   1   3   1
1   1   4   2
2   1   3   3
3   2   7   1
4   2   5   2
5   2   9   3
6   2   4   4
7   2   2   5
8   3   5   1
9   3   6   2
10  3   7   3
11  3   8   4
12  4   4   1
13  4   2   2
14  4   4   3
15  4   5   4
16  4   8   5
17  4   0   6

虽然我可以使用 for 循环来编写它,但我的数据框很大并且计算成本很高,是否可以有效地生成这样的列?谢谢

使用groupby_cumcount:

df['c'] = df.groupby('a').cumcount().add(1)
print(df)

# Output
    a  b  c
0   1  3  1
1   1  4  2
2   1  3  3
3   2  7  1
4   2  5  2
5   2  9  3
6   2  4  4
7   2  2  5
8   3  5  1
9   3  6  2
10  3  7  3
11  3  8  4
12  4  4  1
13  4  2  2
14  4  4  3
15  4  5  4
16  4  8  5
17  4  0  6