如何在数据框中创建新列,以根据Python Pandas中的日期列对每个id的值进行排序?[重复]

new9mtju  于 2023-11-15  发布在  Python
关注(0)|答案(1)|浏览(105)

此问题在此处已有答案

Rank within groups using python-pandas [duplicate](2个答案)
17小时前关闭
我在Python Pandas中有一个Data Frame,如下所示:

  • 列my_date采用日期时间格式。
  • 在我的真实的DataFrame中,我有更多的列。

| ID|我的约会|col1|
| --|--|--|
| 111 |2023-05-15 2023-05-15 2023-05-15| 1 |
| 111 |2023-05-14 2023-05-14 2023-05-14| 11 |
| 111 |2023-05-13 2023-05-13 2023-05-13| 2 |
| 222 |2023-10-11 2023-10-11| 3 |
| 222 |2023-10- 12 2023-10-12 2023-10-12| 55 |
我需要创建新的列col_x,其中每个id的值将是1,2,3,等等,基于列my_date中的日期。因此,对于列col_x中的每个id,在my_date的早期日期中必须是1,等等。
因此,我需要下面这样的东西:
| ID|我的约会|col1|列x|
| --|--|--|--|
| 111 |2023-05-15 2023-05-15 2023-05-15| 1 | 3 |
| 111 |2023-05-14 2023-05-14 2023-05-14| 11 | 2 |
| 111 |2023-05-13 2023-05-13 2023-05-13| 2 | 1 |
| 222 |2023-10-11 2023-10-11| 3 | 1 |
| 222 |2023-12- 12 2023-12-12 2023-12-12| 55 | 2 |
如何在Python Pandas中做到这一点?

axkjgtzd

axkjgtzd1#

您可以使用groupby.rank

df['col_x'] = df.groupby('id')['my_date'].rank('dense').astype(int)

字符串
这或多或少相当于找到排序顺序(例如使用numpy.argsortrank('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

相关问题