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

Python中处理含重复时间列的数据集并转换为宽表的实现方法

解决Pandas长格式转宽格式的问题

嘿,作为Python新手遇到这种长转宽的需求很正常,我来帮你一步步解决,顺便优化你创建DataFrame的代码~

第一步:优化DataFrame的创建方式

你原来的创建方式确实有点绕,我们可以直接用字典传入pd.DataFrame,代码更简洁直观,也不容易出错:

import pandas as pd
import numpy as np

# 修正了原列表中的笔误(第二个Noise的时间应为12:20,和示例数据匹配)
time_col = [
    np.datetime64('2021-04-28T12:10:00'),
    np.datetime64('2021-04-28T12:20:00'),
    np.datetime64('2021-04-28T12:30:00'),
    np.datetime64('2021-04-28T12:40:00'),
    np.datetime64('2021-04-28T12:50:00'),
    np.datetime64('2021-04-28T12:10:00'),
    np.datetime64('2021-04-28T12:20:00'),
    np.datetime64('2021-04-28T12:30:00'),
    np.datetime64('2021-04-28T12:40:00'),
    np.datetime64('2021-04-28T12:50:00')
]
val_col = [10,20,20,35,35, 100,130,155,160,175]
value = ["Students", "Students", "Students", "Students", "Students", "Noise", "Noise", "Noise", "Noise", "Noise"]

# 直接用字典构造DataFrame,清晰高效
df = pd.DataFrame({
    "time_col": time_col,
    "val_col": val_col,
    "value": value
})

第二步:将长格式转成宽格式

我们可以用Pandas的pivot()方法来实现这个转换,它专门用来处理这种“长表转宽表”的场景:

# 执行长转宽操作
wide_df = df.pivot(
    index='time_col',       # 作为行标识的列(不重复的时间)
    columns='value',        # 要转成新列的类别(Students/Noise)
    values='val_col'        # 填充新列的数值
).reset_index()            # 把time_col从索引变回普通列

# 去掉列名的层级标签,让输出格式和你想要的完全一致
wide_df.columns.name = None

运行这段代码后,wide_df就是你想要的宽格式数据啦!

补充说明:如果存在重复的(time_col, value)组合

如果你的数据中同一个时间和类别对应多个数值,可以用pivot_table()替代,并指定聚合函数(比如取平均值、第一个值等):

# 例如取重复值的第一个
wide_df = df.pivot_table(
    index='time_col',
    columns='value',
    values='val_col',
    aggfunc='first'
).reset_index()
wide_df.columns.name = None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:27:50