【问题标题】:Intersection of date ranges, calculation over all elements with an intersecting date range日期范围的交集,计算具有相交日期范围的所有元素
【发布时间】:2014-01-17 17:25:49
【问题描述】:

下表代表一个较大的表格,按代码排序(第一列)。对于每个 id(例如 4884),我想用相同的代码识别其他 id 并且 LOG_TIME 下降 在 [start,finish] 范围内(例如,id=4884)。然后,在所有这些条目中,我想计算最高价格。重复这个 所有条目并输入结果作为最高价格新列。

换句话说:

对于数据中的每一行,计算所有其他条目的最高价格 在具有相同代码和重叠 [start,finish] 范围的表中。

代码完成开始 LOG_TIME ID 价格 2 01/03/13 17:53 20/02/13 11:54 20/02/13 11:54 4884 80.5 2 01/03/13 17:53 20/02/13 11:54 26/02/13 10:06 4884 80.5 2 01/03/13 17:53 20/02/13 11:54 01/03/13 10:53 4884 85.1 2 01/03/13 17:53 20/02/13 11:54 01/03/13 17:53 4884 85.1 2 15/04/13 12:26 05/03/13 12:36 05/03/13 12:36 4961 86.25 2 15/04/13 12:26 05/03/13 12:36 08/03/13 11:11 4961 90.85 2 15/04/13 12:26 05/03/13 12:36 11/03/13 10:40 4961 92 2 15/04/13 12:26 05/03/13 12:36 15/04/13 12:26 4961 92 2 15/04/13 12:26 05/03/13 12:36 09/06/13 17:00 4961 92 2 26/06/13 10:55 26/06/13 10:55 26/06/13 10:55 5410 80.5 2 26/06/13 10:55 26/06/13 10:55 26/06/13 10:55 5410 80.5 3 01/01/14 22:50 18/12/13 15:46 18/12/13 15:46 6102 80.5 3 01/12/20 00:00 23/12/13 10:21 23/12/13 10:21 6114 81.65 3 01/01/14 22:50 18/12/13 15:46 01/01/14 22:50 6102 83.95 3 01/01/14 22:50 18/12/13 15:46 01/01/14 22:50 6102 83.95 ………… …… …… …… ……

有没有办法在大型数据集上有效地做到这一点?我看不到使用虚拟变量的方法。也许唯一的方法是对每个条目的代码中的所有条目进行 FOR 循环,检查 LOG_TIME 是否在该范围内,然后计算最高价格。

我想知道是否有人可以看到这样做的聪明方法。非常感谢任何帮助!

【问题讨论】:

    标签: datetime pandas grouping intersection


    【解决方案1】:

    如果您使用 pandas 并假设日期为日期时间格式,则可以按“代码”分组,然后对其应用 min、max 函数。

    假设 df 是你的数据框,你会有这样的东西。

    df.groupby('Code').apply(lambda x: min(x.LOG_TIME),max(x.LOG_TIME))
    

    如果LOG_TIME不是日期时间格式,只需转换如下:

    import pandas as pd
    df['LOG_TIME'] = pd.to_datetime(df.LOG_TIME)
    

    【讨论】:

    • 之后如何计算该范围内的最高价格?
    • 如果你只需要最高价格很简单df.groupby('Code')['price'].max()
    • 如果我正确理解了这个问题,目标是每行在特定时间范围内和行代码内获得最高价格。我认为您的代码无法回答这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2011-03-29
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多