如何在Polars中实现Pandas to_dict的相同键值字典输出?
Polars 实现 Pandas 式键值对字典输出
问题背景
在 Pandas 中,我们可以通过分组聚合后直接调用to_dict(),得到以分组键为字典key、聚合结果为value的键值对字典:
import pandas as pd d = [{'key':'a', 'value':1}, {'key':'b', 'value':2}, {'key':'b', 'value':1}] df = pd.DataFrame(d) result = df.groupby('key')['value'].sum().to_dict() print(result) # 输出: {'a': 1, 'b': 3}
但在 Polars 中直接使用类似逻辑时,得到的是列结构的字典,手动拆解大型 DataFrame 会非常低效:
import polars as pl df = pl.DataFrame(d) # 列结构字典,不符合需求 print(df.groupby('key').agg(pl.col('value').sum()).to_dict(as_series=False)) # 输出: {'key': ['a', 'b'], 'value': [1, 3]} # 转置后的结果也不符合预期 print(df.groupby('key').agg(pl.col('value').sum()).transpose().to_dict(as_series=False)) # 输出: {'column_0': ['b', 3], 'column_1': ['a', 1]}
高效解决方案
以下几种方法可以快速得到和 Pandas 一致的键值对字典,且适配大型数据集:
方法1:利用rows()直接构造字典
聚合后通过rows()获取(key, value)格式的元组列表,直接传入dict()即可生成目标字典:
agg_df = df.groupby('key').agg(pl.col('value').sum()) result = dict(agg_df.select('key', 'value').rows()) print(result) # {'a': 1, 'b': 3}
方法2:构造 Series 后调用to_dict()
将聚合后的key列作为索引、value列作为值构造 Polars Series,再调用to_dict()得到结果:
agg_df = df.groupby('key').agg(pl.col('value').sum()) result = pl.Series(agg_df['key'], agg_df['value']).to_dict() print(result) # {'a': 1, 'b': 3}
方法3:保留分组顺序的版本
如果需要和原始数据的分组顺序一致,在groupby时添加maintain_order=True参数:
agg_df = df.groupby('key', maintain_order=True).agg(pl.col('value').sum()) result = dict(agg_df.select('key', 'value').rows())
这些方法都借助 Polars 内部的高效处理逻辑,避免了手动遍历拆解列数据的低效操作,在大型 DataFrame 上的性能表现更优。
内容的提问来源于stack exchange,提问作者pyCthon
相关产品推荐
相关产品推荐

