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

Python如何将CSV中EVENT字段值转置为列并合并同时间数据

问题背景

输入文件内容

file.csv内容如下:

NE,PORT,EVENT,TIME,VALUE
NODE,13,MAX,2021-08-30 09:15:00+01:00 DST,-10.9
NODE,13,MIN,2021-08-30 09:15:00+01:00 DST,-11.0
NODE,13,CUR,2021-08-30 09:15:00+01:00 DST,-10.9
NODE,13,MAX,2021-08-30 10:30:00+01:00 DST,-12.9
NODE,13,MIN,2021-08-30 10:30:00+01:00 DST,-10.0
NODE,13,CUR,2021-08-30 10:30:00+01:00 DST,-12.9

原处理代码

原有Python代码逻辑为将EVENT字段转为列匹配对应VALUE,再移除多余字段,代码如下:

intext=open('file.csv', 'r')
check=intext.readlines()
for lista in check:
    lista_split=lista.split(",")
    lista_split.extend(['MAX','MIN','CUR'])
    lista_index=[0,1,2,3,4]
    lista_index.extend([5,6,7])
    contents=list(lista_split[i] for i in lista_index)
    if contents[2]==('MAX'):
        contents[5] = contents[4]
    elif contents[2]==('MIN'):
        contents[6] = contents[4]
    elif contents[2]==('CUR'):
        contents[7] = contents[4]
    contents.remove(contents[2])
    contents.remove(contents[4])
    print(contents)

当前输出问题

原代码为逐行处理逻辑,未做分组聚合,输出结果如下:

['NE', 'PORT', 'TIME', 'MAX', 'MIN', 'CUR']
['NODE', '13', '2021-08-30 09:15:00+01:00 DST', '-10.9', 'MIN', 'CUR']
['NODE', '13', '2021-08-30 09:15:00+01:00 DST', 'MAX', '-11.0', 'CUR']
['NODE', '13', '2021-08-30 09:15:00+01:00 DST', 'MAX', 'MIN', '-10.9']
['NODE', '13', '2021-08-30 10:30:00+01:00 DST', '-12.9', 'MIN', 'CUR']
['NODE', '13', '2021-08-30 10:30:00+01:00 DST', 'MAX', '-10.0', 'CUR']
['NODE', '13', '2021-08-30 10:30:00+01:00 DST', 'MAX', 'MIN', '-12.9']

预期输出

需要将同一NE、PORT、TIME的三行数据合并为一行,填充对应MAX、MIN、CUR数值:

['NE', 'PORT', 'TIME', 'MAX', 'MIN', 'CUR']
['NODE', '13', '2021-08-30 09:15:00+01:00 DST', '-10.9', '-11.0', '-10.9']
['NODE', '13', '2021-08-30 10:30:00+01:00 DST', '-12.9', '-10.0', '-12.9']
修改方案

原代码核心问题是没有增加分组聚合逻辑,逐行处理导致同组数据分散在三行中。我们可以用字典作为聚合容器,以(NE, PORT, TIME)为唯一分组键,把同组的MAX、MIN、CUR值归集到同一个条目下,修改后代码如下:

# 定义聚合容器,key为(NE, PORT, TIME),value为存储三个指标的字典
agg_data = {}

with open('file.csv', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    # 输出表头
    print(['NE', 'PORT', 'TIME', 'MAX', 'MIN', 'CUR'])
    # 遍历处理所有数据行
    for line in lines[1:]:
        line = line.strip()
        if not line:
            continue
        ne, port, event, time, value = line.split(',')
        group_key = (ne, port, time)
        # 分组不存在则初始化
        if group_key not in agg_data:
            agg_data[group_key] = {'MAX': '', 'MIN': '', 'CUR': ''}
        # 填充对应指标的值
        agg_data[group_key][event] = value

# 遍历聚合结果输出
for key, val in agg_data.items():
    res = list(key) + [val['MAX'], val['MIN'], val['CUR']]
    print(res)

运行上述代码即可得到预期输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:18:03