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

如何将多行CSV时序数据转换为按企业列展示的宽表格式?

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

你需要的是数据重塑,把长格式(long format)转换为宽格式(wide format),Pandas里用pivot或pivot_table就能直接实现,完全不需要低效的嵌套循环,处理30万行数据也能高效完成。

步骤1:读取数据

先加载CSV,自动解析日期列以方便后续处理:

import pandas as pd

# 读取CSV文件,指定解析日期列
df = pd.read_csv('your_file.csv', parse_dates=['Date and time'])

步骤2:转换为宽格式

情况1:同一时间+企业唯一对应一条记录

直接用pivot方法完成结构转换:

# 重塑数据:日期作为行索引,企业名作为列名,用电量作为对应值
wide_df = df.pivot(
    index='Date and time',
    columns='Company',
    values='Usage'
).reset_index()  # 可选:将日期从索引转回普通列,匹配你给出的示例格式

# 可选:把缺失值(某时间某企业无数据)补为0
wide_df = wide_df.fillna(0)

转换后的数据结构完全符合你的需求:日期列在前,每个企业作为独立列,对应时间的用电量填充到对应位置。

情况2:同一时间+企业存在多条记录(如重复数据)

如果数据里存在同一时间同一企业的多条用电量记录,用pivot_table指定聚合方式避免报错:

wide_df = df.pivot_table(
    index='Date and time',
    columns='Company',
    values='Usage',
    aggfunc='sum',  # 重复数据求和,也可根据需求用'mean'等聚合方式
    fill_value=0  # 直接将缺失值补为0
).reset_index()

步骤3:保存结果

把转换后的宽格式数据导出为新CSV:

wide_df.to_csv('wide_format_data.csv', index=False)

你之前方法无效的原因

  • df.groupby('Company')['Usage']仅完成了数据分组,没有改变数据结构,它返回的是分组对象,需要配合聚合函数才能得到统计结果,但不是你要的宽格式结构。
  • 嵌套循环写法逻辑错误:遍历df得到的是列名而非行数据,且df[][]的索引方式不符合Pandas规范;同时循环处理30万行数据效率极低,完全不适合这类数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:25:21