You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:37