如何在Python Polars上获得滚动相关性?

问题描述 投票:0回答:1

如何在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))
correlation rolling-computation python-polars
1个回答
2
投票

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。如果您有日期时间,那么还有更多选项,请参阅此处

© www.soinside.com 2019 - 2024. All rights reserved.