首页 > 解决方案 > 如何检查大数据集Python中最大值的日期和时间

问题描述

我有大约 30-60,000,000 行的数据集。每个人在数据集中的每一天Name都有一个或多个ID与之关联的唯一性。一些OP_DATEOP_HOUR唯一的 ID 可以有 0 或每个的空白值Load1,2,3

我正在寻找一种方法来计算所有看起来像这样的列的最大值:OP_DATE

Name       ID       OP_DATE      OP_HOUR    OP_TIME     Load1       Load2     Load3
OMI        1        2001-01-01   1          1           11          10        12
OMI        1        2001-01-01   2          0.2         1           12        10
.
.
OMI        2A      2001-01-01    1          0.4                     5
.
. 
OMI        2A      2001-01-01    24         0.6         2            7        12
.
.
Kain 2     01      2002-01-01    1          0.1         6           12
Kain 2     01      2002-01-01    2          0.98        3           14        7
.
.
OMI        1       2018-01-01    1          0.89        12           10        20
.
.

我想找到 , , 的最大值,并找出Load1它发生在什么地方。Load2Load3OP_DATEOP_TIMEOP_HOUR

我想要的输出是:

Name    ID    max OP_DATE   max OP_HOUR  max OP_TIME    max Load1   max Load2   max Load3
OMI     1     2011-06-11    22 .....         max values on dates
OMI     2A    2012-02-01    12 .....         max values on dates
Kain 2  01    2006-01-01    1.....           max values on dates

有没有办法可以轻松做到这一点?

我试过了:

unique_MAX =  df.groupby(['Name','ID'])['Load1', 'Load2', 'Load3'].max().reset_index()

但这只会按日期分组并给我一个最大的总数 - 我也想要相关的日期、时间和时间。

标签: pythonpython-3.xpandasdataframemax

解决方案


要获取任何给定字段 [max] 的完整信息行

  • 获取您想要的每个组的最大值的索引位置
  • 使用索引返回每个位置的完整行

查找每个名称和 ID 对的最大 Load1 的示例

idx = df.groupby(['Name','ID'])['Load1'].transform(max) == df['Load1']
df[idx]

Out[14]: 
    name   ID        dt  x  y
1   Fred  050  1/2/2018  2  4
4   Dave  001  1/3/2018  6  1
5  Carly  002  1/3/2018  5  7

推荐阅读