python - 不同窗口的滚动平均值(直到一个邮票超过另一个)
问题描述
我目前有一个数据帧 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+。遍历它们是不可行的。
解决方案
推荐阅读
- c++ - Using GoogleMock to avoid dependencies when testing a Card and a CardCollection class
- rust - Use context var in struct member closure?
- r - Can I automatically add functions called using pkg::fct to the importFrom section in roxygen2?
- python - 如何转换 df dtype:bool 到 df
- python - 如何将非连续数字转换为连续数字?
- css - Firefox 剪辑路径 + 框阴影错误
- javascript - 如何在 Electron 上使用 Hotjar?
- javascript - 使用 JS 或 JQ 通过后端生成的排序列表
- php - 在 WordPress /Woocommerce 中将输入数字字段值输入到 PHP 中
- python - Python 模块不会导入