我想使用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数组
非常感谢
答案 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))
应该工作正常。