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

如何将Dask DataFrame转换为以列值为键的字典?

将Dask DataFrame转换为以列值为键的字典

Dask的DataFrameGroupBy不支持像Pandas那样直接迭代分组对象——这是因为Dask采用分布式懒计算模式,直接迭代会强制全量计算且效率低下,因此触发了报错。以下是两种可行的实现方式:

方法一:GroupBy + Apply + Compute(推荐,适合大量分组)

通过apply对每个分组执行转换逻辑,再通过compute()触发计算并转成字典:

import pandas as pd
from dask.dataframe import from_pandas

# 构造测试数据
data = {'col_1': ['a', 'a', 'b', 'b'], 'col_2': [1, 2, 3, 4]}
df = pd.DataFrame(data)
ddf = from_pandas(df, npartitions=2)

# 定义分组处理函数:将目标列转为列表
def process_group(group):
    return group['col_2'].tolist()

# 执行分组转换并生成字典
grouped_result = ddf.groupby('col_1').apply(process_group, meta=('col_2', object)).compute()
result_dict = grouped_result.to_dict()

print(result_dict)
# 输出: {'a': [1, 2], 'b': [3, 4]}

方法二:GetGroup + 遍历唯一键(适合少量分组)

先获取所有分组键的唯一值,再逐个调用get_group获取分组数据并转换:

import pandas as pd
from dask.dataframe import from_pandas

# 构造测试数据
data = {'col_1': ['a', 'a', 'b', 'b'], 'col_2': [1, 2, 3, 4]}
df = pd.DataFrame(data)
ddf = from_pandas(df, npartitions=2)

# 获取所有分组键
group_keys = ddf['col_1'].unique().compute()

# 遍历键生成目标字典
result_dict = {}
for key in group_keys:
    # 获取对应分组的目标列数据并转为列表
    group_values = ddf.groupby('col_1').get_group(key)['col_2'].compute().tolist()
    result_dict[key] = group_values

print(result_dict)
# 输出: {'a': [1, 2], 'b': [3, 4]}

适用场景说明

  • 方法一通过一次计算完成所有分组转换,性能更优,适合分组数量较多的场景;
  • 方法二逻辑直观,但每个分组需单独计算,适合分组数量较少的场景。

内容的提问来源于stack exchange,提问作者Sailu Yellaboina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:39:45