如何对pandas DataFrame做局部转置,将指定列转成行、日期列转为表头
Pandas 行列转换实现方案
你可以通过两种常用的pandas方法组合实现需求,具体代码如下:
方法1:melt + pivot组合(可读性更高)
# 第一步:将A/B/C列从列维度转为行维度,生成METRIC列存储指标名,value列存储对应值 df_melt = df.melt(id_vars=["station", "date"], var_name="METRIC", value_name="value") # 第二步:将date列的取值转为新的列名,完成透视 result = df_melt.pivot(index=["station", "METRIC"], columns="date", values="value").reset_index() # 可选操作:删除列名的多余标识 result.columns.name = None
方法2:stack + unstack组合(代码更简洁)
result = df.set_index(["station", "date"])\ .stack()\ .unstack("date")\ .reset_index()\ .rename(columns={"level_2": "METRIC"}) result.columns.name = None
方法说明
melt:宽表转长表的核心方法,适合将多列同类型指标转为行维度pivot:透视方法,可将指定列的不同取值转为新的列维度stack:将当前列索引转为最内层的行索引unstack:将指定层级的行索引转为列索引
两种方法运行后得到的结果都和你需要的输出格式完全一致。
内容的提问来源于stack exchange,提问作者user3388437
相关产品推荐
相关产品推荐

