Python透视表动态修改列名:替换COUNT_前缀为Disease_COUNT_
问题描述
原始数据集:
ID MONTH_ID CATEGORY Disease_COUNT 551 2021-11 NON_MET 1 580 2022-03 MET 1 580 2022-01 MET 1
现有创建透视表的代码:
df2 = pd.pivot_table(df1,index=['ID','MONTH_ID'], columns=['CATEGORY'], values=["Disease_COUNT"] ).reset_index() cols= ['BH_ID', 'MONTH_ID'] cols.extend([x for x in df2.columns.get_level_values(1) if x != '']) df2.columns = cols
当前透视表列名为ID、MONTH_ID、COUNT_MET、COUNT_NON_MET,需要不使用rename函数,动态修改代码让列名变为ID、MONTH_ID、Disease_COUNT_MET、Disease_COUNT_NON_MET,最终输出:
ID MONTH_ID Disease_COUNT_MET Disease_COUNT_NON_MET 551 2021-11 null 1 580 2022-03 1 null 580 2022-01 1 null
解决方案
修改列名构造逻辑,将值列名与分类取值拼接,同时修正原代码中的笔误:
df2 = pd.pivot_table(df1, index=['ID','MONTH_ID'], columns=['CATEGORY'], values=["Disease_COUNT"] ).reset_index() # 初始化基础列名,修正原代码中BH_ID的笔误 cols = ['ID', 'MONTH_ID'] # 遍历透视表的多级列,拼接出目标格式的列名 cols.extend([f"{level0}_{level1}" for level0, level1 in df2.columns if level0 != '' and level1 != '']) df2.columns = cols
关键修改说明:
- 修正原代码中
BH_ID的笔误,改为匹配原始数据集的ID - 不再仅提取分类列的取值,而是将值列名称(
Disease_COUNT)与分类取值拼接,生成符合要求的列名 - 通过遍历多级列的两个层级,实现动态适配
CATEGORY的所有可能取值,无需硬编码列名
内容的提问来源于stack exchange,提问作者Python_help
相关产品推荐
相关产品推荐

