如何以最简方式将Polars聚合得到的宽表数据转换为适配可视化的长表格式?
如何以最简方式将Polars聚合得到的宽表数据转换为适配可视化的长表格式?
嘿,这个需求太常见啦!不管你是还在Polars的DataFrame阶段,还是已经转成了Pandas格式,都有非常简洁的内置方法完成宽表转长表的操作,完全不用手动拼接数据~
情况1:还在Polars DataFrame阶段(推荐直接用Polars处理)
你一开始用Polars做的聚合,那直接用Polars自带的melt()方法就能一步到位,效率还更高:
# 先修正你聚合代码里的小问题(应该用pl.col而非pd.col) df_pl = (data.group_by('month_code').agg( pl.col('value').mean().alias('avg'), pl.col('value').median().alias('med') ).sort('month_code')) # 一键转成适配可视化的长表 df_pl_long = df_pl.melt( id_vars='month_code', # 保持不变的分组列 value_vars=['avg', 'med'], # 需要转成行的统计列 variable_name='type', # 新的分类列名称(区分avg和med) value_name='value' # 数值列的名称 ) # 如果需要转成Pandas格式用于绘图 df_ = df_pl_long.to_pandas().rename(columns={'month_code': 'month'})
情况2:已经是Pandas DataFrame
如果已经把数据转成了Pandas的df,那用Pandas的melt()方法同样简单:
# 针对你给出的Pandas df直接转换 df_ = df.melt( id_vars='month', value_vars=['avg', 'med'], var_name='type', value_name='value' )
这样转换后的df_就完全符合你需要的格式啦,直接用你写的绘图代码就能生成折线图,非常省心~
备注:内容来源于stack exchange,提问作者lmocsi
相关产品推荐
相关产品推荐

