如何在不使用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
相关产品推荐
相关产品推荐

