如何在Python/Pandas中处理部门周数据结构差异实现合并对比
解决方案:针对部门分组转换周数据格式
根据你的需求,核心是将长表与宽表互相转换,仅处理周数据部分,保留部门的分组逻辑。Pandas的melt(宽表转长表)和pivot/pivot_table(长表转宽表)方法正好能满足这个需求,以下是两种场景的具体实现:
场景1:把Data2(周数据按列分布的宽表)转成Data1的行格式(长表)
假设Data2的结构是部门 + 周1、周2...的列布局,用melt提取周列作为行数据:
import pandas as pd # 读取数据(替换为你的文件路径) data2 = pd.read_excel("你的Excel文件.xlsx", sheet_name="Data2") # 转换:保留部门列,将所有周相关列转为行 data2_transformed = pd.melt( data2, id_vars=["部门"], # 固定不转置的列 var_name="周数", # 生成的周数据行的列名 value_name="对应数值" # 生成的数值列名 )
转换后的数据结构会和Data1完全匹配,可直接用pd.merge合并。
场景2:把Data1(周数据按行分布的长表)转成Data2的列格式(宽表)
如果需要将Data1转成Data2的布局,用pivot或pivot_table实现:
import pandas as pd # 读取数据(替换为你的文件路径) data1 = pd.read_excel("你的Excel文件.xlsx", sheet_name="Data1") # 转换:按部门分组,周数作为列,数值填充对应单元格 data1_transformed = data1.pivot( index="部门", columns="周数", values="数值" ).reset_index() # 将部门从索引转回普通列 # 清理列名层级(可选) data1_transformed.columns.name = None
如果Data1中存在同一部门+周数的重复行,用pivot_table加聚合函数处理:
data1_transformed = data1.pivot_table( index="部门", columns="周数", values="数值", aggfunc="sum" # 根据业务需求选sum/mean等聚合方式 ).reset_index() data1_transformed.columns.name = None
合并操作
格式统一后,直接用pd.merge按对应字段合并:
# 假设已转成相同的长表格式 merged_data = pd.merge(data1, data2_transformed, on=["部门", "周数"], how="outer")
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

