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

如何在不使用iterrows的情况下将指定DataFrame转换为特定字典格式?

问题:将DataFrame转换为特定字典格式(不使用iterrows())

我尝试将如下DataFrame转换为特定字典格式:

import pandas as pd
lake = pd.DataFrame({'area': [10, 10, 30, 40], 'count': [7, 5, 2, 3]})

输出的DataFrame:

area  count
0    10      7
1    10      5
2    30      2
3    40      3

能否在不使用df.iterrows()的前提下得到结果:{'10': [7,5], '30': 2, '40': 3}?


当然可以!我们可以利用pandas的groupby方法高效实现这个需求,完全不需要依赖iterrows()这种逐行迭代的低效方式。这里提供两种实用的实现思路:

方法一:分步处理更清晰

import pandas as pd

lake = pd.DataFrame({'area': [10, 10, 30, 40], 'count': [7, 5, 2, 3]})

# 1. 按area分组,将每组的count值聚合成列表
grouped_data = lake.groupby('area')['count'].agg(list)

# 2. 把仅含单个元素的列表转为单个值,保留多元素的列表
processed_data = grouped_data.apply(lambda x: x[0] if len(x) == 1 else x)

# 3. 转换为字典,并将键转为字符串类型
final_dict = {str(key): value for key, value in processed_data.to_dict().items()}

print(final_dict)
# 输出: {'10': [7, 5], '30': 2, '40': 3}

方法二:简洁的字典推导式写法

如果喜欢更紧凑的代码,可以用字典推导式一步完成:

import pandas as pd

lake = pd.DataFrame({'area': [10, 10, 30, 40], 'count': [7, 5, 2, 3]})

final_dict = {
    str(group_key): (counts.tolist() if len(counts) > 1 else counts.iloc[0])
    for group_key, counts in lake.groupby('area')['count']
}

print(final_dict)
# 输出: {'10': [7, 5], '30': 2, '40': 3}

这两种方法都充分利用了pandas的向量化操作特性,比iterrows()效率高得多,尤其是处理大数据集时优势会更明显。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:47:41