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

如何修正CSV数据集时间并将Name列透视为独立列?

解决CSV数据时间修正+透视转换的问题

嘿,我来帮你搞定这个需求!你已经找对了用pd.pivot实现参数转列的方向,现在只需要先把每组时间统一为ME_POW_1对应时间的问题解决掉就行。咱们一步步来:

步骤1:理解分组逻辑

从你的输入示例能看出来,每一组数据包含FAN_RFB、KW_TOTAL、ME_POW_1、ME_POW_2这几个参数(你说实际是24个,逻辑完全一致),每组的锚点是ME_POW_1——我们需要以它的出现来划分不同的组,然后把同组所有行的时间替换成它的时间。

步骤2:完整代码实现

我把你的原有代码修改并补充,直接就能得到你要的结果:

import pandas as pd

# 读取原始数据(保留你原来的读取逻辑)
raw = pd.read_csv('example.csv', usecols=[0,1,2,3])

# 1. 生成分组标识:每遇到一个ME_POW_1就开启新的一组
raw['group_id'] = (raw['Name'] == 'ME_POW_1').cumsum()

# 2. 合并Date和Time为完整的datetime列
raw['datetime'] = pd.to_datetime(raw['Date'] + ' ' + raw['Time'])

# 3. 修正时间:将每组所有行的时间替换为该组ME_POW_1对应的datetime
raw['corrected_datetime'] = raw.groupby('group_id')['datetime'].transform(
    lambda group: group[raw.loc[group.index, 'Name'] == 'ME_POW_1'].iloc[0]
)

# 4. 执行透视,把Name列的参数转为独立列
result = raw.pivot(index='corrected_datetime', columns='Name', values='Value').reset_index()

# 5. 拆分修正后的时间为Date和Time列,匹配你期望的输出格式
result[['Date', 'Time']] = result['corrected_datetime'].astype(str).str.split(' ', expand=True)
result = result.drop('corrected_datetime', axis=1)

# 调整列的顺序,和你要的输出一致(如果实际有24个参数,把所有参数列按顺序列出来即可)
result = result[['Date', 'Time', 'FAN_RFB', 'KW_TOTAL', 'ME_POW_1', 'ME_POW_2']]

# 查看结果
print(result)

关键逻辑解释

  • 分组标识group_id:用(raw['Name'] == 'ME_POW_1').cumsum(),每遇到一行ME_POW_1,累加器就+1,这样自动把每组数据分到同一个group_id下。
  • 时间修正的transform方法:groupby.transform会对每个组执行自定义逻辑,我们在每个组里找到Name为ME_POW_1的那一行的时间,然后把整个组的corrected_datetime都设为这个值——这样就实现了同组时间统一。
  • 透视后的格式调整:拆分corrected_datetime为Date和Time列,并调整列顺序,完美匹配你期望的输出。

用你的输入示例运行这段代码,就能得到和你给出的期望输出完全一致的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:23:04