我是靠谱客的博主 如意萝莉,最近开发中收集的这篇文章主要介绍pandas rolling方法_如何使用多列参数调用pandas.rolling.apply?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义自己的roll

我们可以创建一个接受窗口大小参数w和任何其他关键字参数的函数。我们使用它来构建一个新的DataFrame,在其中,我们将调用groupby,同时通过kwargs传递关键字参数。

注意:我不需要使用stride_tricks.as_strided,但它很简洁,在我看来是合适的。

from numpy.lib.stride_tricks import as_strided as stride

import pandas as pd

def roll(df, w, **kwargs):

v = df.values

d0, d1 = v.shape

s0, s1 = v.strides

a = stride(v, (d0 - (w - 1), w, d1), (s0, s0, s1))

rolled_df = pd.concat({

row: pd.DataFrame(values, columns=df.columns)

for row, values in zip(df.index, a)

})

return rolled_df.groupby(level=0, **kwargs)

roll(df, 2).mean()

Open High Low Close

0 133.0350 133.2975 132.8250 132.930

1 132.9325 133.1200 132.6750 132.745

2 132.7425 132.8875 132.6075 132.710

3 132.7075 132.7875 132.6000 132.720

我们还可以使用pandas.DataFrame.pipe方法来实现相同的效果:df.pipe(roll, w=2).mean()

旧答案

已弃用{}。有关更新的答案,请参见上文。

定义我们自己的rolldef roll(df, w, **kwargs):

roll_array = np.dstack([df.values[i:i+w, :] for i in range(len(df.index) - w + 1)]).T

panel = pd.Panel(roll_array,

items=df.index[w-1:],

major_axis=df.columns,

minor_axis=pd.Index(range(w), name='roll'))

return panel.to_frame().unstack().T.groupby(level=0, **kwargs)

你应该能够:roll(df, 2).apply(your_function)

使用meanroll(df, 2).mean()

major Open High Low Close

1 133.0350 133.2975 132.8250 132.930

2 132.9325 133.1200 132.6750 132.745

3 132.7425 132.8875 132.6075 132.710

4 132.7075 132.7875 132.6000 132.720f = lambda df: df.sum(1)

roll(df, 2, group_keys=False).apply(f)

roll

1 0 532.345

1 531.830

2 0 531.830

1 531.115

3 0 531.115

1 530.780

4 0 530.780

1 530.850

dtype: float64

最后

以上就是如意萝莉为你收集整理的pandas rolling方法_如何使用多列参数调用pandas.rolling.apply?的全部内容,希望文章能够帮你解决pandas rolling方法_如何使用多列参数调用pandas.rolling.apply?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部