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)
找到答案。以为我会在偶然的机会中发布有人需要它。
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()
我找到答案的链接。