按日期对 pandas df 中的组进行排序和排名

2024-02-10

从以下类型的数据框中,我希望能够对id日期字段:

df = pd.DataFrame({
'id':[1, 1, 2, 3, 3, 4, 5, 6,6,6,7,7], 
'value':[.01, .4, .2, .3, .11, .21, .4, .01, 3, .5, .8, .9],
'date':['10/01/2017 15:45:00','05/01/2017 15:56:00',
        '11/01/2017 15:22:00','06/01/2017 11:02:00','05/01/2017 09:37:00',
        '05/01/2017 09:55:00','05/01/2017 10:08:00','03/02/2017 08:55:00',
        '03/02/2017 09:15:00','03/02/2017 09:31:00','09/01/2017 15:42:00',
        '19/01/2017 16:34:00']})

有效排名或索引,每id,基于日期。

我用过

df.groupby('id')['date'].min()

这允许我提取第一个日期(虽然我不知道如何使用它来过滤掉行),但我可能并不总是需要第一个日期 - 有时它会是第二个或第三个日期,所以我需要生成一个新的列,带有日期索引 - 结果将如下所示:

关于这种排序/排名/标签有什么想法吗?

EDIT

我最初的模型忽略了一个非常普遍的问题。

由于可能有一些id并行执行多个测试,因此它们显示在数据库中的多行中,并具有匹配的日期(date对应于它们被记录的时间)。这些应该被算作相同的日期,而不是增加 date_rank:我已经生成了一个模型,并更新了date_rank演示这看起来如何:

df = pd.DataFrame({
'id':[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6,6,6,7,7], 
'value':[.01, .4, .5, .7, .77, .1,.2, 0.3, .11, .21, .4, .01, 3, .5, .8, .9, .1],
'date':['10/01/2017 15:45:00','10/01/2017 15:45:00','05/01/2017 15:56:00',
        '11/01/2017 15:22:00','11/01/2017 15:22:00','06/01/2017 11:02:00','05/01/2017 09:37:00','05/01/2017 09:37:00','05/01/2017 09:55:00',
        '05/01/2017 09:55:00','05/01/2017 10:08:00','05/01/2017 10:09:00','03/02/2017 08:55:00',
        '03/02/2017 09:15:00','03/02/2017 09:31:00','09/01/2017 15:42:00',
        '19/01/2017 16:34:00']})

计数器可以承受这个:


您可以尝试按降序对日期值进行排序并聚合“id”组值

@praveen的逻辑非常简单,通过扩展逻辑,您可以使用类别的astype将值转换为类别,并可以检索该类别的代码(键'),但它与您的预期输出有点不同

df1 = df.sort_values(['id', 'date'], ascending=[True, False])
df1['date_rank'] =df1.groupby(['id']).apply(lambda x: x['date'].astype('category',ordered=False).cat.codes+1).values

Out:

                 date   id  value   date_rank
0   10/01/2017 15:45:00 1   0.01    2
1   10/01/2017 15:45:00 1   0.40    2
2   05/01/2017 15:56:00 1   0.50    1
3   11/01/2017 15:22:00 2   0.70    1
4   11/01/2017 15:22:00 2   0.77    1
5   06/01/2017 11:02:00 3   0.10    2
6   05/01/2017 09:37:00 3   0.20    1
7   05/01/2017 09:37:00 3   0.30    1
8   05/01/2017 09:55:00 4   0.11    1
9   05/01/2017 09:55:00 4   0.21    1
11  05/01/2017 10:09:00 5   0.01    2
10  05/01/2017 10:08:00 5   0.40    1
14  03/02/2017 09:31:00 6   0.80    3
13  03/02/2017 09:15:00 6   0.50    2
12  03/02/2017 08:55:00 6   3.00    1
16  19/01/2017 16:34:00 7   0.10    2
15  09/01/2017 15:42:00 7   0.90    1

但为了获得准确的输出,这里我使用了字典和反转字典键来提取值

df1 = df.sort_values(['id', 'date'], ascending=[True, False])
df1['date_rank'] = df1.groupby(['id'])['date'].transform(lambda x: list(map(lambda y: dict(map(reversed, dict(enumerate(x.unique())).items()))[y]+1,x)) )

Out:

                date    id  value   date_rank
0   10/01/2017 15:45:00 1   0.01    1
1   10/01/2017 15:45:00 1   0.40    1
2   05/01/2017 15:56:00 1   0.50    2
3   11/01/2017 15:22:00 2   0.70    1
4   11/01/2017 15:22:00 2   0.77    1
5   06/01/2017 11:02:00 3   0.10    1
6   05/01/2017 09:37:00 3   0.20    2
7   05/01/2017 09:37:00 3   0.30    2
8   05/01/2017 09:55:00 4   0.11    1
9   05/01/2017 09:55:00 4   0.21    1
11  05/01/2017 10:09:00 5   0.01    1
10  05/01/2017 10:08:00 5   0.40    2
14  03/02/2017 09:31:00 6   0.80    1
13  03/02/2017 09:15:00 6   0.50    2
12  03/02/2017 08:55:00 6   3.00    3
16  19/01/2017 16:34:00 7   0.10    1
15  09/01/2017 15:42:00 7   0.90    2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按日期对 pandas df 中的组进行排序和排名 的相关文章

随机推荐

  • Coldfusion 10 returnformat =“JSON”添加字符

    我有一个正在从 CF8 转换为 CF10 的应用程序 而我的一些远程 CFC 返回的数据应该是 JSON 现在失败了 因为返回的数据前面似乎有一个 例如 这是返回结构的输出 SUCCESS true ERRORS DATA COLUMNS
  • 如何使用 Axios NPM 库执行带有 XML SOAP 参数的 GET 请求?

    Axios 允许您使用查询和参数运行 GET 查询 有没有办法将 XML SOAP 参数传递到 Axios 请求中 await Axios get url params xmls Is it this data xmls Is it thi
  • 如何从测试覆盖率中排除 Dagger2 类

    是否有任何选项可以从 Android Studio 的测试覆盖率报告中排除 Dagger2 类 JaCoCo 排除 如果您使用 JaCoCo 例如使用 android 仪器连接测试 您需要配置excludes 或包括 根据文档 http w
  • Meteor:将图像从 url 保存到 AWS S3 存储

    我正在尝试在服务器端通过其网址从网络获取图像 即http www skrenta com images stackoverflow jpg http www skrenta com images stackoverflow jpg 并使用
  • 无法取消对 EJB 的 @Asynchronous 调用

    在这个最简单的例子中我做错了什么 Glassfish 4 0 b87 Eclipse 开普勒 m6 我自己 java package com example cancelbug import java util concurrent Exe
  • Three.js - 对象跟随鼠标位置

    我正在创建一个球体Three js每当鼠标移动时它都必须跟随鼠标 如图所示这个例子 https stemkoski github io Three js Mouse Sprite html 处理鼠标移动的函数如下 function onMo
  • 无法复制到 Windows 10 上的 Windows 容器(“docker cp”)

    我在笔记本电脑上设置了适用于 Windows 的 Docker 然后从Linux容器 to Windows容器在 Docker 的设置中 这会提示几次重新启动和 Windows 更新 我提取了一个图像并使用以下命令运行基于它的容器 dock
  • 在具有不同根相对路径的代理后面运行 ASP.NET MVC 应用程序

    我在代理后面运行的 ASP NET MVC 应用程序中遇到路径问题 我们的 IIS 应用程序根路径是例如http 服务器 MyApp http server MyApp 意味着使用应用程序根目录的所有 url Url Action MyAc
  • 实体框架 - 附加实体 - 附加导航属性?

    我有以下通用代码来更新断开连接的实体 public T UpdateItem T entity this dbSet Attach entity this dbContext Entry entity State System Data E
  • 如何让 Install4j 对所有内容进行签名?

    如何更改 Mac OS X 上 install4j 的协同签名对哪些文件进行签名 具体来说 我的应用程序的所有文件 包括其 jar 文件 都没有经过签名 这完全违背了代码签名的目的 所以 我想解决这个问题 我也想在 Windows 上做同样
  • SymPy 中的非顺序替换

    我正在尝试使用 SymPy 1 同时替换表达式中的多个术语 我尝试使用字典作为参数的 subs 函数 2 但发现它是按顺序替换的 In a subs a b b c Out c 问题是第一次替换产生的术语可以被第二次替换所替换 但它不应该
  • Microsoft.Build.BuildEngine.Engine 在构建 WPF 应用程序时抛出错误

    我正在使用 Microsoft Build BuildEngine Engine 构建 WPF 应用程序 这对于类库和 Web 应用程序来说已经成功运行 但现在尝试使用它来构建 WPF 应用程序时 我收到以下错误 目标标记CompilePa
  • powershell 文件名唯一部分列表

    我有多台机器将文件上传到一个 FTP 目录 文件名的第一部分是机器 其余部分是时间戳 例如AAAAA 20130312 125113 现在我想获取已上传到此目录的所有唯一计算机的排序列表 我设法将丢失的所有 filenames substr
  • 使用 adb 向 Android 手机发出捏合/捏合命令

    到目前为止 我可以使用 adb 命令点击 滑动 解锁 安装 卸载和启动应用程序 但无法找到如何使用 adb 命令执行放大 缩小 我已经获得了捏入 捏出的坐标 但不知道如何使用终端的 adb 命令来触发它们 例如 我们有命令 gt adb s
  • 如何为本地Rails项目设置Postgres数据库?

    我最近买了一台新机器 现在想在 Github 上处理我的项目 我很好奇如何在本地计算机上正确设置 Postgres 数据库 我有postgresql pgadmin3 and libpq dev安装在 Ubuntu 12 04 上 我拉下项
  • 大量 iTunes Connect 抓取

    我正在研究从 iTunes Connect 网站获取销售报告和其他数据的不同选项 由于Apple不提供API 所以我找到的所有解决方案都是基于抓取页面 由于我需要我们提供的产品的信息 因此我不太乐意将所有 iTunes 帐户提供给第三方服务
  • Spring Boot 多个端口?

    如何让 Spring Boot Web 应用程序在多个端口上运行 例如8080和80我怎样才能做到这一点 应用程序属性 server port 8080 80 您可以添加侦听器 而不是运行多个应用程序 例如 如果您使用 undertow C
  • Firebase“抛出新错误('提供的服务帐户无效');”错误信息

    我注意到 Firebase 最近发生了变化 我正在构建一个需要 firebase 的 node js 应用程序 以前这就足够了 var Firebase require firebase var firebaseRef new Fireba
  • 从 create-react-app 公共文件夹读取 JSON 文件 [重复]

    这个问题在这里已经有答案了 我有一个 ipAddress json 文件 其中包含以下内容 ipAddress 11 111 111 111 在公共文件夹中 我将该 ipAddress json 文件放入 ipAddress 文件夹中 因此
  • 按日期对 pandas df 中的组进行排序和排名

    从以下类型的数据框中 我希望能够对id日期字段 df pd DataFrame id 1 1 2 3 3 4 5 6 6 6 7 7 value 01 4 2 3 11 21 4 01 3 5 8 9 date 10 01 2017 15