如何在Python Polars中获得滚动相关性? 或者至少每行的相关性如下:
pl.corr(pl.col('col_1'), pl.col('col_2'))
我知道 Pandas 解决方案:
pd_df = result_df.to_pandas()
rol_corr_df = pd_df['col_1'].rolling(5).corr(pd_df['col_2'])
pl_df = pl_df.with_columns(correlation=pl.from_pandas(rol_corr_df))
polars 有
rolling
但它需要指向一个时间或整数列来进行分组。
如果您只想按行分组,那么您可以使用
with_row_index
创建索引。
假设我们从
开始df=pl.DataFrame({'a':np.random.uniform(1,100,100), 'b':np.random.uniform(1,100,100), })
然后我们可以执行以下操作:
df \
.with_row_index('i') \
.rolling('i', period='10i') \
.agg(rolling_corr=pl.corr('a','b')) \
.drop('i')
shape: (100, 1)
┌──────────────┐
│ rolling_corr │
│ --- │
│ f64 │
╞══════════════╡
│ NaN │
│ 1.0 │
│ -0.419386 │
│ -0.322489 │
│ … │
│ -0.333332 │
│ -0.027533 │
│ 0.081232 │
│ 0.151985 │
└──────────────┘
注意
rolling
中,周期设置为字符串10i。如果您有日期时间,那么还有更多选项,请参阅此处