groupby函数后添加一列

时间:2019-07-18 10:02:51

标签: 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

2 个答案:

答案 0 :(得分:4)

您可以GroupBy 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

答案 1 :(得分:1)

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