如何高效转换Polars DataFrame为宽表并还原至原布局?
Polars长表与宽表互转方案
1. 长表转宽表(最优解:pivot方法)
不用纠结group_by系列操作,Polars内置的pivot函数是专门处理长转宽的最优方案,一步到位且效率更高:
wide_df = df.pivot( index="R", columns="C", values="VAL" ) print(wide_df)
执行后直接得到目标宽表:
┌─────┬─────┬─────┐ │ R ┆ c1 ┆ c2 │ │ --- ┆ --- ┆ --- │ │ str ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ r1 ┆ 1 ┆ 2 │ │ r2 ┆ 3 ┆ 4 │ │ r3 ┆ 5 ┆ 6 │ └─────┴─────┴─────┘
参数说明:
index:指定保留为行标识的列(这里是R)columns:指定要转换为表头的列(这里是C)values:指定填充单元格的数值列(这里是VAL)
2. 宽表还原为长表(melt方法)
用melt函数可以快速把宽表转回原始长表结构:
long_df = wide_df.melt( id_vars="R", value_vars=["c1", "c2"], variable_name="C", value_name="VAL" ) print(long_df)
执行后得到原始长表:
┌─────┬─────┬─────┐ │ R ┆ C ┆ VAL │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i64 │ ╞═════╪═════╪═════╡ │ r1 ┆ c1 ┆ 1 │ │ r1 ┆ c2 ┆ 2 │ │ r2 ┆ c1 ┆ 3 │ │ r2 ┆ c2 ┆ 4 │ │ r3 ┆ c1 ┆ 5 │ │ r3 ┆ c2 ┆ 6 │ └─────┴─────┴─────┘
参数说明:
id_vars:指定保持不变的行标识列(这里是R)value_vars:指定要展开为行的宽表列(这里是c1、c2)variable_name/value_name:指定转换后的列名,和原始表的C、VAL对应
内容的提问来源于stack exchange,提问作者Federico Visconti
相关产品推荐
相关产品推荐

