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)
如何将序列号添加到数据框中的分组数字?像这样:
序号
我用 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)