Python: 如何给组添加序号?

Python: How can I add sequence numbers to groups?

如何将序列号添加到数据框中的分组数字?像这样:

序号

我用 df.groupby().cumcount() 试过了,但没用

例如:

import pandas as pd

tmp = pd.DataFrame({'group Nr':[50,50,50,53,53,53,53,56,56,59,59,59]})
tmp['sequential Nr'] = tmp.groupby('group Nr').cumcount()
tmp.sort_values('group Nr')

print(tmp)

会给我:

    group Nr  sequential Nr
0         50           0
1         50           1
2         50           2
3         53           0
4         53           1
5         53           2
6         53           3
7         56           0
8         56           1
9         59           0
10        59           1
11        59           2

如您所见,这并不是我想要的。

假设你只想创建一个序号列,你可以使用ngroup:

df = pd.DataFrame({'group Nr':[50,50,50,53,53,53,53,56,56,59,59,59]})
df["sequence Nr"] = df.groupby("group Nr").ngroup() + 1

ngroup 从 0 开始为每个组编号,因此您需要加 1。

您可以通过以下代码到达目标。

import pandas as pd

tmp = pd.DataFrame({'group Nr':[50,50,50,53,53,53,53,56,56,59,59,59]})
tmp = tmp.sort_values('group Nr')
s_df = tmp.groupby('group Nr').head(1)
s_df['sequential Nr'] = range(1, len(s_df)+1)
tmp = tmp.merge(s_df, on='group Nr', how='left')

print(tmp)