如何将循环生成的列名不同的矩阵存入外部空DataFrame字典?
解决分组生成不同列名DataFrame的存储问题
完整解决方案代码
import pandas as pd # 示例数据集 myData = pd.DataFrame({ 'dataset': ['cat', 'cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'dog', 'bird', 'bird', 'bird', 'bird'], 'category_1': ['orange', 'orange', 'white', 'white', 'black', 'brown', 'brown', 'black', 'red', 'green', 'red', 'green'], 'category_2': ['this_cat', 'that_cat', 'this_cat', 'that_cat', 'this_dog', 'that_dog', 'this_dog', 'that_dog', 'this_bird', 'that_bird', 'this_bird', 'that_bird'], 'values': ['1', '8', '9', '2', '5', '4', '3', '10', '0', '2', '7', '9'] }) # 将values列转为数值类型(原数据是字符串,无法正确计算均值) myData['values'] = myData['values'].astype(float) # 初始化存储字典,用dataset的唯一值作为键 output_dfs = {k: pd.DataFrame() for k in myData['dataset'].unique()} # 分组处理并存储到字典 for dataset_name, group_data in myData.groupby('dataset'): # 按category_1和category_2分组计算均值 grouped_mean = group_data.groupby(['category_1', 'category_2'])['values'].mean().reset_index() # 透视转换为矩阵 matrix = grouped_mean.pivot(index='category_2', columns='category_1', values='values').reset_index() # 添加dataset列,保留分组标识 matrix['dataset'] = dataset_name # 调整列顺序,把dataset放在最前面 matrix = matrix[['dataset'] + [col for col in matrix.columns if col != 'dataset']] # 存入字典 output_dfs[dataset_name] = matrix # 验证结果:访问每个DataFrame print("bird的DataFrame:") print(output_dfs['bird']) print("\ncat的DataFrame:") print(output_dfs['cat']) print("\ndog的DataFrame:") print(output_dfs['dog'])
关键改动说明
- 修正数据类型:原
values列是字符串格式,必须转为数值类型(float/int)才能正确计算均值,否则会报错或得到错误结果。 - 初始化字典:用
myData['dataset'].unique()获取唯一分组名,避免重复键,确保每个分组对应一个字典项。 - 添加分组标识列:在生成的
matrix中加入dataset列,保留分组信息,符合你期望的输出格式。 - 调整列顺序:把
dataset列移到最前面,和你给出的示例输出结构一致。
输出结果示例
运行后,output_dfs['bird']会输出:
dataset category_2 green red 0 bird that_bird 5.5 NaN 1 bird this_bird NaN 3.5
(注:你示例中green值14.5为计算错误,原数据bird的green对应值是2和9,均值为(2+9)/2=5.5)
内容的提问来源于stack exchange,提问作者psychcoder
相关产品推荐
相关产品推荐

