Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫计算最大可能滚动平均值,直到窗口大小_Python_Pandas - Fatal编程技术网

Python 熊猫计算最大可能滚动平均值,直到窗口大小

Python 熊猫计算最大可能滚动平均值,直到窗口大小,python,pandas,Python,Pandas,我正在尝试使用Pandas的滚动平均函数重新创建平滑功能。除了最后N行(其中N等于所选的窗口大小)导致NaN之外,一切都很好。我理解为什么存在NaN,但我想知道是否有办法强制Pandas使用最大窗口大小计算最后N行 开始数据帧: 当我这样做时: df['freq_average'] = pd.rolling_mean(df['freq'],5,min_periods=0,center=True) 我得到这个结果: 因此,我要寻找的是一种计算上述结果的方法,但是,然后使用窗口大小4(而不是原来的

我正在尝试使用Pandas的滚动平均函数重新创建平滑功能。除了最后N行(其中N等于所选的窗口大小)导致NaN之外,一切都很好。我理解为什么存在NaN,但我想知道是否有办法强制Pandas使用最大窗口大小计算最后N行

开始数据帧:

当我这样做时:

df['freq_average'] = pd.rolling_mean(df['freq'],5,min_periods=0,center=True)
我得到这个结果:

因此,我要寻找的是一种计算上述结果的方法,但是,然后使用窗口大小4(而不是原来的5)计算索引16(在本例中),使用窗口大小3计算索引17,依此类推

如果您查看来自的结果,索引16-20应产生以下结果:


我已经用头撞了这一天左右,运气不好。任何方向都非常感谢

我要说的是,我同意安迪·海登的观点,他说只有最后两行应该是NaN,因为你使用的是center=True(那么它将从前2行到下2行取平均值)

Python会在第一行自动执行您需要的操作(取可用操作的平均值),但不会在底部执行。逻辑是获得2个先前值和2个后续值(如果可用)

因此,要遵循顶层行的逻辑:

for i in xrange(2):
    index = i + 19
    df['freq_average'] = sum(df['freq'].iloc[index-2:21] / (20-index+3)

这将取前两个值(索引-2)的平均值,直到结束(21)。这是针对您的具体问题。对于不同的窗口,您需要进行调整。

根据“帮助(pd.rolling_mean)”,设置min_periods=0(正如您所做的)应该满足您的要求。但是,在pandas 0.14.1中,滚动函数的实现中存在一个错误,当使用center=True时,会导致将nan放在末尾。错误报告位于。

可能有更直接、更有效的解决方案,但您是否尝试过自己计算这些值?我的意思是,建立一个从I=16到I=20的迭代方法并不难,计算从I到20的平均值。更奇怪的是,当我做你的滚动平均值时,我得到了不同的数字,只有2条NaN线。你能再检查一遍吗?@Inox-有没有关于你的建议方向的指针?@AndyHayden-只要重新运行iPython笔记本中的所有内容,就会得到相同的结果。现在我明白了,事实上,只有最后2个应该是NaN,因为你使用的是center=True(那么它将从前2到下2取平均值)。Python会在第一行中自动执行您需要的操作(取可用的平均值),但在底部不会执行。如果我从df['freq\u average']=pd中删除minu periods=0。滚动平均值(df['freq'],5,minu periods=0,center=True),我得到的结果与您所指的结果类似。仅在5个窗口中,前5个结果和后5个结果显示为NaN。话虽如此,我将修改你的答案,看看我是否可以调整它来处理一个N大小的窗口。我会发回调查结果!
      y    mc    vc     g            freq              freq_average
0   1980  2110   891  acorn  0.0000006816639806737  0.0000006531021239145
1   1981  2493   925  acorn  0.0000007869870441530  0.0000006446377522759
2   1982  1970   969  acorn  0.0000006058489961744  0.0000006595496331134
3   1983  1974   942  acorn  0.0000005869087043278  0.0000006551768804259
4   1984  2265   962  acorn  0.0000006284175013608  0.0000006527473745770
5   1985  2331  1002  acorn  0.0000006287865167972  0.0000006546484943915
6   1986  2288  1036  acorn  0.0000005938515224444  0.0000006694537560066
7   1987  2975  1081  acorn  0.0000007639327989758  0.0000006489678280088
8   1988  2562  1164  acorn  0.0000006201948589259  0.0000006545554245675
9   1989  2773  1271  acorn  0.0000006308818219374  0.0000006593064945501
10  1990  3230  1449  acorn  0.0000006736596925364  0.0000006612498465021
11  1991  3984  1279  acorn  0.0000008445218584394  0.0000006668995733997
12  1992  2908  1349  acorn  0.0000005616418361769  0.0000006710063571366
13  1993  3511  1522  acorn  0.0000006673125583208  0.0000006621034432386
14  1994  3623  1709  acorn  0.0000006391704741358  0.0000006623864713016
15  1995  3836  1760  acorn  0.0000006497943728333  0.0000006608123863716
16  1996  4304  1910  acorn  0.0000006909335126709                    NaN
17  1997  4107  1954  acorn  0.0000006390261435505                    NaN
18  1998  4469  1993  acorn  0.0000006660007460970                    NaN
19  1999  4494  2141  acorn  0.0000006233081676193                    NaN
20  2000  4827  2304  acorn  0.0000006135668877077                    NaN
      y    mc    vc     g            freq                 freq_average
16  1996  4304  1910  acorn  0.0000006909335126709        0.0000659528
17  1997  4107  1954  acorn  0.0000006390261435505        0.0000638973
18  1998  4469  1993  acorn  0.0000006660007460970        0.0000648639
19  1999  4494  2141  acorn  0.0000006233081676193        0.0000645971
20  2000  4827  2304  acorn  0.0000006135668877077        0.0000647105
for i in xrange(2):
    index = i + 19
    df['freq_average'] = sum(df['freq'].iloc[index-2:21] / (20-index+3)