使用两个指针的数据框Mangling.python和/或矢量化的解决方案可能吗?



我有两个这样的数据帧

A)大时间帧时间序列(15行* 2色)

value            time_point
0          NaN  2020-11-23T00:00:00Z
1   352.111111  2020-11-24T00:00:00Z
2   352.588888  2020-11-25T00:00:00Z
3   352.866663  2020-11-26T00:00:00Z
4   352.583333  2020-11-27T00:00:00Z
5   352.420000  2020-12-01T00:00:00Z
6   354.473333  2020-12-02T00:00:00Z
7   356.766667  2020-12-03T00:00:00Z
8   358.540000  2020-12-04T00:00:00Z
9   359.133333  2020-12-07T00:00:00Z
10  360.946667  2020-12-08T00:00:00Z
11  360.636667  2020-12-09T00:00:00Z
12  359.086667  2020-12-10T00:00:00Z
...
...

B)粒度时间序列(任意行* 2色)

value            time_point
0   111   2020-11-23T00:01:00Z
1   111   2020-11-23T00:02:00Z
2   111   2020-11-23T00:03:00Z
3   111   2020-11-23T00:04:00Z
4   111   2020-11-23T00:05:00Z
5   111   2020-11-24T00:01:00Z
6   111   2020-11-24T00:02:00Z
7   111   2020-11-24T00:03:00Z
8   111   2020-11-24T00:04:00Z
9   111   2020-11-24T00:05:00Z
10  111   2020-11-25T00:01:00Z
11  111   2020-11-25T00:02:00Z
12  111   2020-11-25T00:03:00Z
13  111   2020-11-25T00:04:00Z
14  111   2020-11-25T00:05:00Z
...
...
120 111   2020-12-01T00:00:00Z

最终结果

value            time_point      -2_days_prior_value
0   111   2020-11-23T00:01:00Z         NaN (larger timeframe has no value for 21st Nov, 2020)
1   111   2020-11-23T00:02:00Z         NaN
2   111   2020-11-23T00:03:00Z         NaN
3   111   2020-11-23T00:04:00Z         NaN
4   111   2020-11-23T00:05:00Z         NaN
5   111   2020-11-24T00:01:00Z         NaN
6   111   2020-11-24T00:02:00Z         NaN
7   111   2020-11-24T00:03:00Z         NaN
8   111   2020-11-24T00:04:00Z         NaN
9   111   2020-11-24T00:05:00Z         NaN
10  111   2020-11-25T00:01:00Z         NaN (23rd Nov in the larger timeframe has NaN. Hence the same)
11  111   2020-11-25T00:02:00Z         NaN
12  111   2020-11-25T00:03:00Z         NaN
13  111   2020-11-25T00:04:00Z         NaN (just 4 entries on 25th Nov instead of 5)
14  111   2020-11-26T00:01:00Z  352.111111 (taken from previous larger timeframe 24th Nov, 2020)
...
...
120 111   2020-12-01T00:00:00Z  352.866663 (taken from larger timeframe 26th Nov, 2020)

我通常做的是

  • 将数据帧值移动2行(相当于-2)
  • 获取相关的序列(序列迭代比数据帧迭代更快)
  • 创建一个新的空列表来存储结果-2_days_prior_value
  • 循环遍历小时间范围(多行)并在大时间范围中查找相应的日期,如果日期匹配,将结果附加到新列表中。

这些操作变得非常频繁。我知道某些Pandas结构,但它们要么效率低下,要么不适合我的用例。

  • Resampling。我以前用过它,但我不能把它应用到我的问题。
  • locnp.where代替。我必须调用操作n的次数,其中n = len(larger timeframe)
  • 我只是不能均匀地复制/外推,因为较小的时间框架可能有不规则的倍数。

Pandas中的任何内置函数或通用python解决方案,可以帮助我更快地计算相同的结果和/或使用更少的代码行,还是我已经在正确的路径上?

  1. 从第二个数据帧减去1分钟

  2. 右连接第一个数据帧

  3. 在连接列的时间列上增加2天1分钟

这是否达到了你想要做的?

最新更新