【问题标题】:group by custom time periods按自定义时间段分组
【发布时间】:2015-12-19 05:29:58
【问题描述】:

我有第一个包含原始数据的表,只有两列 timetemperature

                            time  temperature
40953 2015-01-01 12:00:00.493000     88.75951
40954 2015-01-01 12:01:00.494000     88.76033
40955 2015-01-01 12:02:00.495000     88.75979
40956 2015-01-01 12:03:00.480000     88.75938
40957 2015-01-01 12:04:00.496000     88.75944
40958 2015-01-01 12:05:00.497000     88.76046
40959 2015-01-01 12:06:00.560000     88.76008
40960 2015-01-01 12:07:00.498000     88.75940
40961 2015-01-01 12:08:00.484000     88.75938
40962 2015-01-01 12:09:00.484000     88.75933
...

然后我有第二个表格,其中包含数据采集周期。

                     start                stop
run                                           
248523 2015-01-05 16:13:09 2015-01-05 17:42:17
248529 2015-01-05 17:47:03 2015-01-05 18:29:27
248530 2015-01-05 18:30:24 2015-01-05 18:33:24
248531 2015-01-05 18:39:31 2015-01-05 18:40:31
248532 2015-01-05 18:43:57 2015-01-06 09:00:17
...

如您所见,运行不连续:许多温度测量值不属于任何运行。数据比句点多得多。

我需要做的是计算每次运行的平均温度,平均属于运行的所有温度测量值。我想第一步要做的是将两个表连接起来,但我无法表达谓词“startstop 之间的time”。有什么建议吗?

【问题讨论】:

    标签: join pandas time group-by


    【解决方案1】:

    如果我理解正确,here 回答了一个关于不规则时间间隔的类似问题。

    有一个使用 for 循环的慢速方法和一个使用 np.searchsorted 的快速方法。在您的情况下,我想您需要一个额外的 interval_id 类别来处理不适合任何时间间隔的样本。这行得通吗?

    【讨论】:

    • 是的,类似,但实际上我不确定是否需要合并这两个表。我只需要平均值。我不关心不适合任何间隔的测量值
    • 一旦你用 interval_id 标记了第一个表的每一行,那么你可以像这样计算每个 bin 的平均值: df.groupby('interval_id').mean() (我猜首先删除任何不适合任何时间间隔的行可能是个好主意。)
    • 当然,但在我看来这不是最佳解决方案。例如,现在我正在做相反的事情:我循环遍历周期表,并在每个周期中找到匹配的数据,然后累积数据以计算平均值。无需加入。
    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2021-04-11
    • 2022-11-22
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多