Python:如何向组添加序列号?

Python: How can I add sequence numbers to groups?

提问人:maggTech 提问时间:3/24/2022 最后编辑:maggTech 更新时间:3/24/2022 访问量:535

问:

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

序列号enter image description here

我试过了,但没有用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

正如你所看到的,这并不是我想要的。

Python 数据帧 数字 序列

评论

1赞 Shiping 3/24/2022
你需要说出你期望从代码中得到什么。
0赞 maggTech 3/24/2022
我想要每个,这是正在进行的。sequence numbergroup number
0赞 D.L 3/24/2022
你有一个数字序列。我明白了,等等。那么你在寻找一个不同的序列吗?[0,1,2][0,1,2,3]

答:

0赞 hillard28 3/24/2022 #1

假设您只想创建一个序列号列,则可以使用 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。

0赞 gpxlcj 3/24/2022 #2

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

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)