首页 > 解决方案 > 不同窗口的滚​​动平均值(直到一个邮票超过另一个)

问题描述

我目前有一个数据帧 d1,以纳秒为单位。时间列是 timedelta 类型。我对这个时间范围进行了分组,以便它包含一天中从早上 8 点到晚上 7 点的数据,并且包含一天中的每一秒的数据(有些行是空的,这完全没问题)。d1 有数十万行 - 这完全没问题,因为它每天测量每一秒并收集数据。

我有第二个数据帧 d2,它只有一些时间戳,并且没有特定的时间顺序。可以迭代 3 分钟,可以迭代 1 分钟,可以迭代 1 秒。

我想合并 d1 和 d2。我想这样做,以便 d1 的每个时间值,一旦它大于 d2,就会对 d1 上该时间范围内的所有值进行平均,并且只添加一行。

我不能使用嵌套的 for 循环(这很容易工作),因为我必须遍历数十万行。

我正在尝试以下操作:

final['average'] = 0
for i in range(0, len(d1)):
    for j in range(0, len(d2)):
            if d1['date'][j] >= d2['date'][i]:
                final['average'] = d2['Number'].rolling(j).mean()

D1:

<table >
    <tbody>
        <tr>
            <td>Date/Time </td>
            <td>Average_from_d2</td>
        </tr>
        <tr>
            <td>09:30:37.692597 </td>
            <td> </td>
        </tr>
        <tr>
            <td> 09:32:39.142597</td>
            <td> </td>
        </tr>
        <tr>
            <td>09:39:22.290597 </td>
            <td> </td>
        </tr>
        <tr>
            <td>09:49:13.472597 </td>
            <td> </td>
        </tr>
        <tr>
            <td>09:54:08.993497 </td>
            <td> </td>
        </tr>
    </tbody>
</table>

D2

<table >
    <tbody>
        <tr>
            <td>Date/Time </td>
            <td>Number</td>
        </tr>
        <tr>
            <td>09:30:38.6324497 </td>
            <td> 3356</td>
        </tr>
        <tr>
            <td> 09:30:39.694597</td>
            <td>4456 </td>
        </tr>
        <tr>
            <td>09:30:40.6714597 </td>
            <td>5546 </td>
        </tr>
        <tr>
            <td>09:30:41.6843299 </td>
            <td> 634</td>
        </tr>
        <tr>
            <td>09:30:42.69123437 </td>
            <td>22 </td>
        </tr>
    </tbody>
</table>

D1 的数据帧将有大约 5k 行,而 D2 的数据帧将有 400k+。遍历它们是不可行的。

标签: pythonpandasdataframemergetime-series

解决方案


推荐阅读