Python面板替换

问题描述 投票:0回答:1

Python不再使用面板。我没有足够的技巧来考虑替代方案,并希望有人知道可以解决的方法。我已经使用下面的代码一段时间了,但更新后不再起作用。我希望先更新代码,然后再恢复为不支持的旧版本。我遇到的问题是面板已停用。您能看到解决此问题的方法吗?因为我要完成的任务是找到股票的beta。我已经从以下链接中获取了代码

Efficient Python Pandas Stock Beta Calculation on Many Dataframes

def roll(df, w):
 # stack df.values w-times shifted once at each stack
 roll_array = np.dstack([df.values[i:i+w, :] for i in range(len(df.index) - w + 1)]).T
 # roll_array is now a 3-D array and can be read into
 # a pandas panel object
 panel = pd.Panel(roll_array, 
                 items=df.index[w-1:],
                 major_axis=df.columns,
                 minor_axis=pd.Index(range(w), name='roll'))
 # convert to dataframe and pivot + groupby
 # is now ready for any action normally performed
 # on a groupby object
 return panel.to_frame().unstack().T.groupby(level=0)

rdf = roll(df, 156)
python pandas
1个回答
0
投票

找到答案。以为我会在偶然的机会中发布有人需要它。

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()

我找到答案的链接。

link to answer

© www.soinside.com 2019 - 2024. All rights reserved.