如何重构嵌套字典以实现Pandas DataFrame的重命名与聚合?
问题:如何重构嵌套字典以适配Pandas的rename方法,实现列重命名与分组求和?
现有嵌套字典:
groupings = {'Group_A':{'species':['plantain', 'banana'], 'shape':'oblong'}, 'Group_B':{'species':['lemon', 'orange'], 'shape':'round'} }
以及Pandas DataFrame(注:修正原代码拼写错误,pd.dataframe改为pd.DataFrame,列名bannana改为banana以匹配字典):
import pandas as pd d = pd.DataFrame(data={'orange': [1, 2], 'banana': [3, 4], 'lemon': [3, 4]})
需求是基于该字典对DataFrame列重命名后分组求和,预期输出:
Group_A Group_B 0 3 4 1 4 6
解决方案:将嵌套字典转为扁平映射字典
Pandas的DataFrame.rename()方法的columns参数仅接受单层键值对字典(键为原列名,值为新列名),无法直接识别嵌套结构。因此需要将原嵌套字典重构为扁平的列名-分组名映射:
1. 构建扁平映射字典
遍历原嵌套字典,提取每个物种对应的分组名:
rename_map = {} for group_name, group_details in groupings.items(): for species in group_details['species']: rename_map[species] = group_name
生成的rename_map为:
{'plantain': 'Group_A', 'banana': 'Group_A', 'lemon': 'Group_B', 'orange': 'Group_B'}
2. 执行重命名与分组求和
使用该映射字典完成列重命名,再按列分组求和:
# 重命名列 d.rename(columns=rename_map, inplace=True) # 按分组名分组并求和 d = d.groupby(by=d.columns, axis=1).sum() print(d)
执行后即可得到预期输出。
内容的提问来源于stack exchange,提问作者coccolith
相关产品推荐
相关产品推荐

