【发布时间】:2015-05-14 15:47:33
【问题描述】:
在使用 group by 函数时,我在尝试在 Pandas 中实现“滚动”函数(即 rolling_std() 和 rolling_corr())时遇到问题。我尝试使用以下公式,但我不断收到“ValueError: cannot reindex from a duplicate axis”。
df 是我的数据框:
df.groupby(level='ID')['Val1'].apply(lambda x: pd.rolling_std(x,30))
我有什么:
ID Date Val1 Val2
A 1-Jan 45 22
A 2-Jan 15 66
A 3-Jan 55 13
B 1-Jan 41 12
B 2-Jan 87 45
B 3-Jan 82 66
C 1-Jan 33 34
C 2-Jan 15 67
C 3-Jan 46 22
我需要什么:
ID Date Val1 Val2 Rolling_Corr Rolling_Std (Val1)
A 1-Jan 45 22
A 2-Jan 15 66 0.1 1.2
A 3-Jan 55 13 0.16 2.5
B 1-Jan 41 12
B 2-Jan 87 45 0.15 2.8
B 3-Jan 82 66 0.05 1.1
C 1-Jan 33 34
C 2-Jan 15 67 0.09 1.5
C 3-Jan 46 22 0.11 2.4
谢谢
【问题讨论】:
-
我越来越近了。 rolling_std 的上述函数现在实际上可以工作了。我不得不重新索引我的数据框。 df['roll_corr'] = df.groupby(level='ID').apply(lambda x: pd.rolling_corr(x['Val1'],x['Val2'],2)) 当我添加函数时rolling_corr(),它不返回任何错误,但它也返回所有空值。有什么想法吗?
-
这可行,但它没有按“ID”分组:df['roll_corr'] = pd.rolling_corr(df['Val1'],df['Val2'],2)。我也无法让它与 .apply 函数一起使用。
-
嗨,Brendan,你解决了这个问题吗?如果是这样,您能否分享您的解决方案。
标签: python pandas group-by correlation standard-deviation