gpt4 book ai didi

python - pandas 中的条件滚动计算

转载 作者:太空宇宙 更新时间:2023-11-03 14:02:48 27 4
gpt4 key购买 nike

我想计算一个称为“下行贝塔”的量。假设我有一个数据框 df:

df = pd.DataFrame({'A': [-0.1,0.3,-0.4, 0.8,-0.5],'B': [-0.2,0.5,0.3,-0.5,0.1]},index=[0, 1, 2, 3,4])

我想添加一列“C”来计算这个下行 beta,定义为 A 列和 B 列之间的协方差,仅考虑 A 列的负值与 B 列的相应值。然后应除以该协方差通过仅考虑负值的 A 列的方差。

在上面的例子中,它应该相当于计算两个序列之间的协方差:[-0.1,-0.4,-0.5]和[-0.2,0.3,0.1]。除以系列的方差 [-0.1,-0.4,-0.5]。

下一步是将此指标滚动到初始大型数据帧 df 的索引上。

有没有一种有效的方法可以做到这一点?以矢量化的方式。我想结合 pd.rolling_cov 和 np.where?

谢谢!

最佳答案

这是您要找的吗?您可以过滤掉正值,然后相应地调用 pandas covvar 函数:

v = df[df.A.lt(0)]
v.cov() / v.A.var()

A B
A 1.000000 -0.961538
B -0.961538 1.461538

如果您只想要对角线处的值,

np.diag(v.cov() / v.A.var(), k=-1)
array([-0.96153846])
<小时/>

对于滚动窗口,您可能需要跳过一些麻烦,但这应该是可行的;

v = df[df.A.lt(0)]  
i = v.rolling(3).cov().A.groupby(level=0).last()
j = v.rolling(3).A.var()

i / j

0 NaN
2 NaN
4 -0.961538
Name: A, dtype: float64

关于python - pandas 中的条件滚动计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49136939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com