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

如何用Pandas将含重复日期的DataFrame转换为宽表结构

解决Pandas DataFrame长表转宽表问题

原始数据结构

先构造你的原始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'date': ['2023-02-13', '2023-02-13', '2023-02-13', '2023-02-10', '2023-02-08', '2023-02-08', '2023-02-05', '2023-02-02'],
    'data': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
    'meter_id': [1, 2, 6, 1, 1, 2, 1, 2]
})

原始表格结构:

datedatameter_id
2023-02-13a1
2023-02-13b2
2023-02-13c6
2023-02-10d1
2023-02-08e1
2023-02-08f2
2023-02-05g1
2023-02-02h2

转换方法:使用pivot函数

直接用Pandas的pivot方法就能实现需求,指定行索引、列名和值的来源:

pivoted_df = df.pivot(index='date', columns='meter_id', values='data').reset_index()
# 移除列索引的默认名称,和目标结构对齐
pivoted_df.columns.name = None

转换后的结果

执行后得到的DataFrame结构如下:

date126
2023-02-13abc
2023-02-10dNaNNaN
2023-02-08efNaN
2023-02-05gNaNNaN
2023-02-02NaNhNaN

补充说明

如果数据中存在同一日期+同一meter_id对应多条data的情况,pivot会报错,这时可以改用pivot_table并指定聚合方式(比如取第一个值):

# 示例:取同一分组的第一个值
pivoted_df = df.pivot_table(index='date', columns='meter_id', values='data', aggfunc='first').reset_index()
pivoted_df.columns.name = None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:01:02