程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2023-11-18 10:24     阅读(11147)     评论(0)     点赞(8)     收藏(0)


我在 Python Pandas 中有数据框,如下所示:

  • 列 my_date 采用日期时间格式。

  • 在我真正的数据框中,我有更多的列。

    ID 我的约会 第 1 列
    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 的值将根据 my_date 列中的日期为 1、2、3 等。因此,对于列 col_x 中的每个 id,在 my_date 的早期日期中必须为 1,依此类推。

因此,我需要如下所示的内容:

ID 我的约会 第 1 列 列_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 中做到这一点?


解决方案


看起来你可以使用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


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/2039602/9037c1680fde8119a879/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)