基于行数据规范化数据

Normalizing data based on row data

我有一个带有 ID 和月份的 pandas df,我想做的是在 ID/Month 首次出现在数据集中时用数字标记它

ID     Month      Number
123    201501     1
123    201502     2
123    201503     3
234    201502     1
234    201503     2
455    201503     1

正如您所见,ID 123 每个月都会在数据集中出现多次。此外,ID 234 仅出现在月 201502 之后。我想做的是在激活时用数字标记行。

能请教一下吗?


不确定出了什么问题,但这是我从您提供的公式中得到的输出:

ID  Month   Num
12  201510  1
12  201511  17
12  201512  2
12  201601  3
12  201602  4
12  201603  5
12  201604  6
12  201605  7
12  201606  8
12  201607  9
12  201608  10
12  201609  11
12  201610  12
12  201611  13
12  201612  14
12  201701  15
12  201702  16

看来你可以使用 cumcount:

df = df.sort_values(['ID', 'Month']).reset_index()
df['num'] = df.groupby('ID').cumcount() + 1
print (df)
    ID   Month  Number  num
0  123  201501       1    1
1  123  201502       2    2
2  123  201503       3    3
3  234  201502       1    1
4  234  201503       2    2
5  455  201503       1    1