You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas将长格式DataFrame转换为带双层表头的宽格式

解决方案:用Pandas生成双层表头的宽格式数据

没问题,这个需求用Pandas的内置方法就能轻松实现,我给你详细的步骤和代码:

完整代码示例

import pandas as pd

# 读取你的CSV文件(替换成实际文件路径)
df = pd.read_csv('your_data.csv')

# 转换为宽格式,生成多层列索引
df_wide = df.pivot(
    index='date_time',
    columns='country',
    values=['temp', 'dc']
)

# 调整列层级顺序:把「国家」放在第一层,「属性(temp/dc)」放在第二层
df_wide = df_wide.swaplevel(axis=1).sort_index(axis=1)

# 可选:查看转换后的结果
print(df_wide.head())

代码分步解释

  1. 读取原始数据:用pd.read_csv加载你的CSV文件,记得把your_data.csv替换成实际的文件路径。
  2. 生成基础宽格式:pivot是实现转换的核心方法——我们指定date_time作为行索引,country作为列的分组维度,temp和dc作为要展开的属性字段。这一步会生成带多层列索引的DataFrame,但默认的层级顺序是「属性在前,国家在后」。
  3. 调整列层级结构:用swaplevel(axis=1)交换列的两个层级,再用sort_index(axis=1)把同一国家的列归拢到一起,最终就得到了你想要的「国家为第一层表头,temp/dc为第二层表头」的结构。

处理重复数据的特殊情况

如果你的CSV里存在同一date_time+country的重复记录(比如同一时间同一国家有多条temp/dc数据),可以用pivot_table替代pivot,并指定聚合函数来处理重复值:

df_wide = df.pivot_table(
    index='date_time',
    columns='country',
    values=['temp', 'dc'],
    aggfunc='first'  # 取第一条记录,也可以用'mean'取平均值、'max'取最大值等
)
df_wide = df_wide.swaplevel(axis=1).sort_index(axis=1)

转换后的结果完全匹配你想要的结构:date_time作为行索引,外层表头是各个国家,内层表头对应temp和dc属性。

内容的提问来源于stack exchange,提问作者khuesmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:05:17