将函数(MinCovDet)应用于Pandas Dataframe滚动窗口(n x m数组)

时间:2018-07-05 11:02:42

标签: python pandas scikit-learn apply

我想使用sklearn.covariance MinCovDet计算滚动鲁棒协方差。 我有一个数据框df,具有3000行和20列,其中包含索引中的日期。 假设过去200天中每行要计算鲁棒协方差。 我已经尝试过

df.apply(lambda x: MinCovDet().fit(df[x-400:x].values))

我收到TypeError :(“无法转换输入[date \ n2004-01-02等...

有什么主意吗? 一个更笼统的问题是如何将函数应用于熊猫数据框的n x m数组

非常感谢

2 个答案:

答案 0 :(得分:0)

回答“更普遍的问题”。

有专门针对此类情况的pandas.DataFrame.rolling()方法:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html

然后,您可以像往常一样使用.apply(),或将滚动对象用作参数。因此,根据您的情况,代码如下:

MinCovDet.fit(df.rolling(window = 400).values)

答案 1 :(得分:0)

如果您的日期确实是索引,那么df.values不应看到它们。如果日期是第一列,则

df1 = df.loc[:, 1:]
df1.apply(lambda x: MinCovDet().fit(df[x-400:x].values))

应该工作正常。