如何通过关联DataFrame为Pandas添加多索引并按元索引聚合求和
解决方法:为DataFrame添加层级列并按高层索引汇总求和
没问题,我来一步步帮你实现这个需求!首先我们先把你提到的两个DataFrame构造出来,方便后续操作:
import pandas as pd # 构造原始df data = [[1, 2, 1, 4], [3, 0, 2, 2], [1, 5, 3, 1]] df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D']) # 构造cat_df并整理成映射关系 cat_data = [['X', 'A'], ['Y', 'B'], ['Y', 'C'], ['Z', 'D']] cat_df = pd.DataFrame(cat_data, columns=['broader category', 'current category']) # 转成"当前列名: 高层分类"的映射字典 col_mapping = cat_df.set_index('current category')['broader category'].to_dict()
步骤1:为df添加层级列索引
我们需要把cat_df里的broader category作为高层索引,原始列名作为底层索引,构造一个多级列(MultiIndex):
# 生成多级列的元组列表,格式为(高层分类, 原始列名) multi_col_tuples = [(col_mapping[col], col) for col in df.columns] # 为df设置多级列索引 df.columns = pd.MultiIndex.from_tuples(multi_col_tuples, names=['broader category', 'current category']) print("添加层级列后的df:") print(df)
运行后你会得到这样的层级列结构:
broader category X Y Z current category A B C D 0 1 2 1 4 1 3 0 2 2 2 1 5 3 1
步骤2:按高层索引汇总求和
接下来直接用sum()方法,指定按broader category层级进行列方向的聚合求和:
# 按高层分类汇总,axis=1表示对列操作 summary_df = df.sum(level='broader category', axis=1) print("\n汇总后的新DataFrame:") print(summary_df)
最终的汇总结果如下:
X Y Z 0 1 3 4 1 3 2 2 2 1 8 1
简单说下逻辑:level='broader category'指定了聚合的层级,axis=1告诉pandas我们要对列维度进行求和,这样就能自动把同一高层分类下的所有子列值加总到一起啦。
内容的提问来源于stack exchange,提问作者Al S
相关产品推荐
相关产品推荐

