我有一个简单的数据框架如下所示:
import polars as pl
df = pl.DataFrame(
{
"group": [1, 1, 1, 1, 2, 2, 2, 2],
"a": [1, 2, 3, 4, 1, 2, 3, 4],
"b": [5, 1, 7, 9, 2, 4, 9, 7],
"c": [2, 6, 3, 9, 1, 5, 3, 6],
}
)
我希望在极点数据框中有一个相关的‘矩阵’, struct 如下.我怎么能做到这一点?
┌───────┬──────┬──────────┬──────────┬──────────┐
│ group ┆ name ┆ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ f64 ┆ f64 ┆ f64 │
╞═══════╪══════╪══════════╪══════════╪══════════╡
│ 1 ┆ a ┆ 1.0 ┆ 0.680336 ┆ 0.734847 │
│ 1 ┆ b ┆ 0.680336 ┆ 1.0 ┆ 0.246885 │
│ 1 ┆ c ┆ 0.734847 ┆ 0.246885 ┆ 1.0 │
│ 2 ┆ a ┆ 1.0 ┆ 0.830455 ┆ 0.756889 │
│ 2 ┆ b ┆ 0.830455 ┆ 1.0 ┆ 0.410983 │
│ 2 ┆ c ┆ 0.756889 ┆ 0.410983 ┆ 1.0 │
└───────┴──────┴──────────┴──────────┴──────────┘
目前,我是这样try 的:
df.groupby("group").agg(
[
pl.corr(col1, col2).alias(f"{col1}_{col2}")
for col1 in ["a", "b", "c"]
for col2 in ["a", "b", "c"]
]
)
shape: (2, 10)
┌───────┬─────┬──────────┬──────────┬─────┬──────────┬──────────┬──────────┬─────┐
│ group ┆ a_a ┆ a_b ┆ a_c ┆ ... ┆ b_c ┆ c_a ┆ c_b ┆ c_c │
│ --- ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ f64 ┆ f64 ┆ f64 ┆ ┆ f64 ┆ f64 ┆ f64 ┆ f64 │
╞═══════╪═════╪══════════╪══════════╪═════╪══════════╪══════════╪══════════╪═════╡
│ 2 ┆ 1.0 ┆ 0.830455 ┆ 0.756889 ┆ ... ┆ 0.410983 ┆ 0.756889 ┆ 0.410983 ┆ 1.0 │
│ 1 ┆ 1.0 ┆ 0.680336 ┆ 0.734847 ┆ ... ┆ 0.246885 ┆ 0.734847 ┆ 0.246885 ┆ 1.0 │
└───────┴─────┴──────────┴──────────┴─────┴──────────┴──────────┴──────────┴─────┘
因此,我不确定如何才能将其转换为我想要的形状/ struct ?或者,有没有其他(可能更好的)方法来直接生成我想要的结果?