创建按第一个开始日期对 ID 进行排序的列

Create column that orders ID by first Start Date

提问人:Paulo Cortez 提问时间:3/22/2023 更新时间:3/22/2023 访问量:29

问:

假设我有以下数据帧:

ID  Start Date
1   1990-01-01
1   1990-01-01
1   1991-01-01
2   1991-01-01
2   1990-01-01
3   2002-01-01
3   2000-01-01
4   1991-01-01

创建名为 Order 的列的最佳方法是什么,对于 ID 列中的每个唯一 ID,从最早的开始日期的 1 开始,并将 1 添加到后续的最早开始日期(如果值相同,则顺序无关紧要)生成以下数据帧:

ID  Start Date  Order
1   1990-01-01  2
1   1990-01-01  3
1   1989-01-01  1
2   1991-01-01  2
2   1990-01-01  1
3   2002-01-01  2
3   2000-01-01  1
4   1991-01-01  1
Python Pandas 列表 筛选器 序列

评论

0赞 mozway 3/22/2023
输出不清楚,要升序还是降序?

答:

1赞 mozway 3/22/2023 #1

使用 groupby.rank

df['Start Date'] = pd.to_datetime(df['Start Date'])
df['Order'] = df.groupby('ID')['Start Date'].rank('first', ascending=False).astype(int)

输出:

   ID Start Date  Order
0   1 1990-01-01      2
1   1 1990-01-01      3
2   1 1991-01-01      1
3   2 1991-01-01      1
4   2 1990-01-01      2
5   3 2002-01-01      1
6   3 2000-01-01      2
7   4 1991-01-01      1

跟:ascending=True

   ID Start Date  Order
0   1 1990-01-01      1
1   1 1990-01-01      2
2   1 1991-01-01      3
3   2 1991-01-01      2
4   2 1990-01-01      1
5   3 2002-01-01      2
6   3 2000-01-01      1
7   4 1991-01-01      1