Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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_Dataframe_User Defined Functions - Fatal编程技术网

Python 熊猫:在数据框中创建一个新列,它是滚动窗口的一个功能

Python 熊猫:在数据框中创建一个新列,它是滚动窗口的一个功能,python,pandas,dataframe,user-defined-functions,Python,Pandas,Dataframe,User Defined Functions,我有一个数据框,可以计算一列新的滚动10周期平均值 使用pandas.stats.moments.rolling_平均值(现有列,10, 最小周期=10)。如果少于10节课,我会得到一个NaN。我 可以对滚动中间带执行相同的操作。太好了 我现在想计算N个周期的其他滚动函数,但不能计算 《我的生活》了解如何使用熊猫的用户定义函数。在里面 特别是,我想计算一个滚动的10点Hodges-Lehman平均值,它是 定义如下: def hodgesLehmanMean(x): return 0.

我有一个数据框,可以计算一列新的滚动10周期平均值 使用
pandas.stats.moments.rolling_平均值(现有列,10,
最小周期=10)
。如果少于10节课,我会得到一个NaN。我 可以对滚动中间带执行相同的操作。太好了

我现在想计算N个周期的其他滚动函数,但不能计算 《我的生活》了解如何使用熊猫的用户定义函数。在里面 特别是,我想计算一个滚动的10点Hodges-Lehman平均值,它是 定义如下:

def hodgesLehmanMean(x): 
    return 0.5 * statistics.median(x[i] + x[j] for i in range(len(x)) for j in range(i+1,len(x)))
如何将其转换为可应用于熊猫的滚动函数 如果传递给它的周期少于10个,则返回一个NaN?我是一名医生 熊猫是新手,所以我特别感谢你给我一个简单的解释 例如。

您可以使用:

屈服

    foo   bar
0     0   NaN
1     1   NaN
2     2   NaN
3     3   NaN
4     4   NaN
5     5   NaN
6     6   NaN
7     7   NaN
8     8   NaN
9     9   4.5
10   10   5.5
11   11   6.5
12   12   7.5
13   13   8.5
14   14   9.5
15   15  10.5
16   16  11.5
17   17  12.5
18   18  13.5
19   19  14.5
霍奇斯莱曼平均值的更快版本是:

def hodgesLehmanMean_alt(x): 
    m = np.add.outer(x,x)
    ind = np.tril_indices(len(x), -1)
    return 0.5 * np.median(m[ind])

这是一个完整性检查,显示对于长度为100的1000个随机数组,
hodgesLehmanMean_alt
返回与
hodgesLehmanMean
相同的值:

In [68]: m = np.random.random((1000, 100))

In [69]: all(hodgesLehmanMean(x) == hodgesLehmanMean_alt(x) for x in m)
Out[69]: True
下面是一个基准测试,显示
霍奇斯莱曼平均值\u alt
大约快8倍:

In [80]: x = np.random.random(5000)

In [81]: %timeit hodgesLehmanMean(x)
1 loops, best of 3: 3.99 s per loop

In [82]: %timeit hodgesLehmanMean_alt(x)
1 loops, best of 3: 463 ms per loop
您可以使用:

屈服

    foo   bar
0     0   NaN
1     1   NaN
2     2   NaN
3     3   NaN
4     4   NaN
5     5   NaN
6     6   NaN
7     7   NaN
8     8   NaN
9     9   4.5
10   10   5.5
11   11   6.5
12   12   7.5
13   13   8.5
14   14   9.5
15   15  10.5
16   16  11.5
17   17  12.5
18   18  13.5
19   19  14.5
霍奇斯莱曼平均值的更快版本是:

def hodgesLehmanMean_alt(x): 
    m = np.add.outer(x,x)
    ind = np.tril_indices(len(x), -1)
    return 0.5 * np.median(m[ind])

这是一个完整性检查,显示对于长度为100的1000个随机数组,
hodgesLehmanMean_alt
返回与
hodgesLehmanMean
相同的值:

In [68]: m = np.random.random((1000, 100))

In [69]: all(hodgesLehmanMean(x) == hodgesLehmanMean_alt(x) for x in m)
Out[69]: True
下面是一个基准测试,显示
霍奇斯莱曼平均值\u alt
大约快8倍:

In [80]: x = np.random.random(5000)

In [81]: %timeit hodgesLehmanMean(x)
1 loops, best of 3: 3.99 s per loop

In [82]: %timeit hodgesLehmanMean_alt(x)
1 loops, best of 3: 463 ms per loop

如果查看,您可以看到
rolling\u apply
函数,它允许您以滚动方式应用任何函数。函数必须将“滚动窗口”中的数据作为参数。不清楚你的Hodgeslehmanmen怎么会有窗户。什么是
x
?它是窗口还是整个数据集?如果您查看,您可以看到
rolling\u apply
函数,它允许您以滚动方式应用任何函数。函数必须将“滚动窗口”中的数据作为参数。不清楚你的Hodgeslehmanmen怎么会有窗户。什么是
x
?它是窗口还是整个数据集?x是一个iterable(通常是一个列表)。你的解释和例子非常清楚。非常感谢。很抱歉没有提前响应,但您的代码非常出色,它将例行程序的速度提高了一个数量级。谢谢你。值得指出的是,Hodges-Lehman均值是一个非常有用的估值器,因为它在标准(高斯)情况下具有非常高(95%)的效率,并且能够拒绝任意大的异常值,只要它们不超过29%的点。简言之,它为我们提供了平均值的大部分效率,具有很大的稳健性,并且没有中值的缺点(例如锁定到静态中心值)。再次感谢。这个答案与熊猫的最新版本已经过时了-有任何更新计划吗?x是可编辑的(通常是列表)。你的解释和例子非常清楚。非常感谢。很抱歉没有提前响应,但您的代码非常出色,它将例行程序的速度提高了一个数量级。谢谢你。值得指出的是,Hodges-Lehman均值是一个非常有用的估值器,因为它在标准(高斯)情况下具有非常高(95%)的效率,并且能够拒绝任意大的异常值,只要它们不超过29%的点。简言之,它为我们提供了平均值的大部分效率,具有很大的稳健性,并且没有中值的缺点(例如锁定到静态中心值)。再次感谢。这个答案与熊猫的最新版本已经过时了-有计划更新吗?