提问人:dingaro 提问时间:11/14/2023 更新时间:11/14/2023 访问量:30
如何在 Data Frame 中创建新列以根据 Python Pandas 中的日期列对每个 id 的值进行排序?[复制]
How to create new column in Data Frame to sort values for each id based on date column in Python Pandas? [duplicate]
问:
我在 Python Pandas 中有 Data Frame,如下所示:
列 my_date 采用日期时间格式。
在我的实际 DataFrame 中,我有更多的列。
编号 my_date col1 111 2023-05-15 1 111 2023-05-14 11 111 2023-05-13 2 222 2023-10-11 3 222 2023-10-12 55
我需要创建新的列col_x其中每个 id 的值为 1、2、3 等,具体取决于第 my_date 列中的日期。因此,对于列中的每个 id,col_x 必须在 my_date 的早期日期为 1,依此类推。
因此,因此我需要如下所示的东西:
编号 | my_date | col1 | col_x |
---|---|---|---|
111 | 2023-05-15 | 1 | 3 |
111 | 2023-05-14 | 11 | 2 |
111 | 2023-05-13 | 2 | 1 |
222 | 2023-10-11 | 3 | 1 |
222 | 2023-12-12 | 55 | 2 |
如何在Python Pandas中做到这一点?
答:
0赞
mozway
11/14/2023
#1
看起来您可以使用 groupby.rank
:
df['col_x'] = df.groupby('id')['my_date'].rank('dense').astype(int)
这或多或少等同于查找排序顺序(例如使用 numpy.argsort
或 ),只是它会对重复值进行平均排名:rank('first')
df['col_x'] = df.groupby('id')['my_date'].transform(np.argsort).add(1)
输出:
id my_date col1 col_x
0 111 2023-05-15 1 3
1 111 2023-05-14 11 2
2 111 2023-05-13 2 1
3 222 2023-10-11 3 1
4 222 2023-10-12 55 2
具有重复值的示例:
id my_date col1 rank('dense') argsort+1 rank('first')
0 111 2023-05-15 1 3 4 4
1 111 2023-05-14 11 2 2 2
2 111 2023-05-14 9 2 3 3
3 111 2023-05-13 2 1 1 1
4 222 2023-10-11 3 1 1 1
5 222 2023-10-12 55 2 2 2
评论