如何将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
相关产品推荐
相关产品推荐

