问题标签 [rolling-computation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8049 浏览

python - 如何有效地计算熊猫时间序列中的滚动唯一计数?

我有一个时间序列的人参观建筑物。每个人都有一个唯一的 ID。对于时间序列中的每条记录,我想知道过去 365 天内访问该建筑物的唯一人数(即 365 天窗口的滚动唯一人数)。

pandas似乎没有用于此计算的内置方法。当存在大量唯一访问者和/或大窗口时,计算变得计算密集。(实际数据比这个例子大。)

有没有比我在下面所做的更好的计算方法?我不确定为什么我制作的快速方法windowed_nunique(在“速度测试 3”下)偏离了 1。

谢谢你的帮助!

相关链接:

初始化

In [1]:

In [2]:

Out[2]:

速度参考

In [3]:

3.32 ms ± 124 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

速度测试 1

In [4]:

2.42 s ± 282 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [5]:

速度测试 2

In [6]:

In [7]:

430 ms ± 31.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [8]:

速度测试 3

In [9]:

In [10]:

In [11]:

107 µs ± 63.5 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [12]:

In [13]:

Out[13]:

0 投票
1 回答
1089 浏览

python - Pandas 中的滚动标准偏差为一列返回零

有没有人遇到滚动标准偏差不能只处理熊猫数据框中的一列的问题?

我有一个带有日期时间索引和相关财务数据的数据框。当我运行 df.rolling().std() (伪代码,请参见下面的实际代码)时,我得到了除一列之外的所有列的正确数据。该列在应该有标准偏差值的地方返回 0。我在使用 .rolling_std() 时也遇到了同样的错误,并且在尝试运行 df.rolling().skew() 时遇到了错误,所有其他列都可以工作,并且此列给出 NaN。

让我对这个错误感到失望的是,其他列可以正常工作,对于这个列,df.rolling().mean() 有效。此外,该列具有 dtype float64,这应该不是问题。我也检查了,没有看到丢失的数据。我正在使用 30 天的滚动窗口,如果我尝试使用 series[-30:].std() 获得最后一个标准偏差值,我会得到正确的结果。因此,似乎有关滚动部分的特定内容不起作用。我玩弄了 .rolling() 的参数,但没有任何改变。

第一行将三个数据帧组合在一起。然后我创建具有滚动平均值、标准和偏斜(过去 = 30)的单独数据帧,然后将它们组合成一个数据帧。

我遇到问题的列的名称是“TY1_slope”。所以我运行了一些代码如下,看看哪里有错误。

前两行代码输出正确的标准差和平均值(0.08 和 0.14)。然而,第三行代码产生零,但第四行产生准确的平均值(这些系列中的最终值是 0.0 和 0.14)。

如果有人可以帮助了解如何查看 .rolling 源代码,那也会很有帮助。我是这样做的新手,并尝试了以下方法,但只有几行似乎没有多大帮助。

0 投票
1 回答
6952 浏览

python - 熊猫数据框中前 N 行的条件均值和总和

关注的是这个示例性的 pandas 数据框:

无论何时TriggerTrue我希望计算最后 3 个(从当前)有效测量值的总和和平均值。如果该列Valid是,则测量被认为是有效的True。因此,让我们使用上述数据框中的两个示例来澄清一下:

  1. Index 32,1,0:应该使用指数。预期的Sum = 9.0, Mean = 3.0
  2. Index 77,6,5:应该使用指数。预期的Sum = 6.0, Mean = 2.0

我尝试过pandas.rolling创建新的移位列,但没有成功。请参阅我的测试中的以下摘录(应该直接运行):

非常感谢任何帮助或解决方案。谢谢和干杯!

编辑:澄清:这是我期望的结果数据框:

EDIT2:另一个澄清:

我确实没有算错,而是我没有尽可能清楚地表达我的意图。这是使用相同数据框的另一种尝试:

所需的数据框,突出显示的相关字段

让我们先看一下列:我们在索引 3(绿色矩形)中Trigger找到第一个。True所以索引 3 是我们开始寻找的点。索引 3 处没有有效的测量值(列ValidFalse; 红色矩形)。所以,我们开始往前追溯,直到我们积累了三行,其中ValidTrue。这发生在索引 2,1 和 0 上。对于这三个索引,我们计算列的总和和平均值Measurement(蓝色矩形):

  • 总和:2.0 + 4.0 + 3.0 = 9.0
  • 平均值:(2.0 + 4.0 + 3.0) / 3 = 3.0

现在我们开始这个小算法的下一次迭代:再次查找列中的下True一个Trigger。我们在索引 7(绿色矩形)处找到它。在索引 7 处还有一个有效的测量值,因此我们这次将其包括在内。对于我们的计算,我们使用索引 7,6 和 5(绿色矩形),因此得到:

  • 总和:1.0 + 2.0 + 3.0 = 6.0
  • 平均值:(1.0 + 2.0 + 3.0) / 3 = 2.0

我希望,这对这个小问题有更多的了解。

0 投票
0 回答
79 浏览

python - 将滚动应用于一系列列表

假设您有一些代码:

当上面的代码运行时,x总是等于data. 就好像滚动功能从未应用过。

如何将这样的滚动(或扩展)功能应用于 Pandas 系列?

0 投票
3 回答
10641 浏览

pandas - 使用滚动中值过滤 Pandas 数据框中的异常值

我正在尝试从带有日期的 GPS 高程位移散点图中过滤掉一些异常值

我正在尝试使用 df.rolling 计算每个窗口的中值和标准偏差,然后如果它大于 3 个标准偏差则删除该点。

但是,我想不出一种方法来遍历列并比较滚动计算的中值。

这是我到目前为止的代码

如何循环并比较每个点并将其删除?

0 投票
1 回答
1631 浏览

python - Pandas:使用带有用户功能的滚动窗口

我有一个数据框,我用旧式滚动语法估计了各种类型的 10 年滚动平均值:

其中 hodgesLehman mean 是我写的一个函数(见下文)。

现在旧的滚动功能已被弃用,我正在尝试以新样式 series.rolling() 样式重写我的代码,即:

前两个(平均值和中值)就像一个魅力。第三个(hodgesLehmanMean)不起作用 - 它引发了AttributeError: 'Rolling' object has no attribute 'hodgesLehmanMean

如何让我的函数使用新的 series.rolling 语法?

0 投票
1 回答
5370 浏览

python - Pandas Dataframe 滚动两列两行

我得到了一个数据框,其中有两列分别保存经度和纬度坐标:

将熊猫导入为 pd

现在我想在数据帧上应用滚动窗口函数,该函数采用一行和另一行的经度和纬度(两列)(窗口大小 2)来计算半正弦距离。

我的问题是我从来没有得到所有四个值 Lng1、Lat1(第一行)和 Lng2、Lat2(第二行)。如果我使用axis = 1,那么我将获得第一行的Lng1和Lat1。如果我使用axis = 0,那么我将获得第一行和第二行的Lng1和Lng2,但只有经度。

如何使用两行两列应用滚动窗口?有点像这样:

目前,我正在通过 shift(-1) 将数据框与自身连接起来进行此计算,从而将所有四个坐标都放在一行中。但是滚动也应该是可能的。另一种选择是将 Lng 和 Lat 组合到一个列中,并在其上应用 axis=0 的滚动。但一定有更简单的方法,对吧?

0 投票
1 回答
44 浏览

python - 计算数据是否高于熊猫过去两个(或更多)值的滚动窗口内的另一个系列

我在 DataFrame 中有这两个系列:

我会创建一个新列] 来计算前 2 行(或更多)行的滚动窗口中列中的值比列中的值高df['C多少倍。df['A']df['B']

结果将是这样的:

我还想创建一个列来汇总数据,df['A']而不是df['B']总是使用滚动窗口。

结果如下:

提前致谢。

0 投票
2 回答
6820 浏览

pandas - 如何计算numpy中一维数组的移动(或滚动,如果你愿意)百分位数/分位数?

在熊猫中,我们有pd.rolling_quantile(). 在 numpy 中,我们有np.percentile(),但我不知道如何做它的滚动/移动版本。

为了解释我所说的移动/滚动百分位数/分位数的含义:

给定数组[1, 5, 7, 2, 4, 6, 9, 3, 8, 10],窗口大小为 3 的移动分位数0.5(即移动百分位数 50%)为:

[5, 5, 4, 4, 6, 6, 8, 8]答案也是如此。为了使生成的序列与输入的长度相同,一些实现插入NaNor None,同时pandas.rolling_quantile()允许通过较小的窗口计算前两个分位数值。

0 投票
0 回答
217 浏览

python - pandas groupby 通过滚动窗口

我有一系列,news我想news通过滚动窗口(例如,3 天)对列进行分组,以进行进一步的文本分析。

注意:索引可能不是连续的天数(可能有些天没有条目)。

熊猫数据框如下所示:

我想使用 3 天滚动窗口迭代所有新闻。像 data.groupby('date', rolling = 3).apply(something) 之类的东西(我知道没有这样的语法,仅用于说明目的)

第一次应用操作将应用于以下数据(从 2017-01-03 到 2017-01-05)。

相应地,对这个的第二个apply操作:(从2017-01-04到2017-01-06)

我知道我可以手动找到索引并进行切片。但是,如果有使用 Python 和 Pandas 功能的更方便的方法来执行此操作,我想要。