Python 在groupby函数后添加一列

Python 在groupby函数后添加一列,python,pandas,Python,Pandas,我想根据以下条件添加一列 df = pd.DataFrame({'X' : ['M1', 'M1', 'M1', 'M2', 'M2', 'M3', 'M4', 'M4', 'M4', 'M4'], 'Total': [1,2,3,21,15,42,1,2,25,4]}) 预期产出: X Total P M1 1 P1 M1 2 P2 M1 3 P3 M2 21 P1 M2 15 P2 M3 42 P1 M4 1 P1 M4 2 P2 M4 25 P3 M4 4 P4

我想根据以下条件添加一列

  df = pd.DataFrame({'X' : ['M1', 'M1', 'M1', 'M2', 'M2', 'M3', 'M4', 'M4', 'M4', 'M4'], 'Total': [1,2,3,21,15,42,1,2,25,4]})
预期产出:

X Total P

M1 1 P1

M1 2 P2

M1 3 P3

M2 21 P1

M2 15 P2

M3 42 P1

M4 1 P1

M4 2 P2

M4 25 P3

M4 4 P4
您可以在
X
列中,使用
cumcount
进行聚合,并添加
p
作为前缀:

df['P'] = 'P'+df.groupby('X').cumcount().add(1).astype(str)

   X   Total   P
0  M1      1  P1
1  M1      2  P2
2  M1      3  P3
3  M2     21  P1
4  M2     15  P2
5  M3     42  P1
6  M4      1  P1
7  M4      2  P2
8  M4     25  P3
9  M4      4  P4
df['P'] = df.groupby(['X'])['Total'].agg({"p":"cumcount"})+1
df['P'] = 'P'+df['p'].astype(str)
print(df)
    X   Total  P
0  M1      1  P1
1  M1      2  P2
2  M1      3  P3
3  M2     21  P1
4  M2     15  P2
5  M3     42  P1
6  M4      1  P1
7  M4      2  P2
8  M4     25  P3
9  M4      4  P4