我有以下数据:
ID Time
1 01-01-01
1 02-01-01
1 02-01-01
2 01-01-01
我想从0开始,并按组ID每增加一个新时间加1。所以我需要得到类似的东西
ID Time Result
1 01-01-01 0
1 02-01-01 1
1 02-01-01 1
2 01-01-01 0
请问有一种聪明的方法吗? (请注意,这只是为了说明,实际数据足够大。)
答案 0 :(得分:4)
您可以将groupby
与pd.factorize
一起使用:
df['Result'] = df.groupby('ID')['Time'].transform(lambda x: pd.factorize(x)[0])
df
输出:
ID Time Result
0 1 01-01-01 0
1 1 02-01-01 1
2 1 02-01-01 1
3 2 01-01-01 0
答案 1 :(得分:3)
Rank在这里可以使用一个警告,它的排名从1开始。通过减去1处理它。
df['Result'] = df.groupby('ID').Time.rank('min').astype(int) - 1
ID Time Rank
0 1 2001-01-01 0
1 1 2001-02-01 1
2 1 2001-02-01 1
3 2 2001-01-01 0