要在第3列中标识具有相同值的行并将它们分组到outpu上吗

2024-09-30 23:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

不使用panda就可以做到这一点,因为它使pyinstaller.exe文件变成了74MB而不是7.7MB,而且编译大约需要10倍的时间,而且运行.exe时速度较慢。你知道吗

我有一个这样的.csv文件,按[3]列排序(假设列从[0]开始):

Class,USB3,10,25,Y
Class,PCIE_CLK,8,31,Y
Class,PCIE_RX,8,31,Y
Class,PCIE_TX,8,31,Y
Class,PCIE_TX_C,8,31,Y
Class,DDR4_B0,3.20,38,Y
Class,DDR4_B1,3.20,38,Y
Class,DDR4_B2,3.20,38,Y
Class,DDR4_B3,3.20,38,Y
Class,DDR4_ADDR,3.20,39,Y
Class,DDR4_0,3.20,39,Y
Class,DDR4_1,3.20,39,Y
Class,DDR4_2,3.20,39,Y
Class,DDR4_3,3.20,39,Y

我想在[3]列中标识和分组具有相同值的行。 最终,输出将如下所示:

25,USB3
31,PCIE_CLK or PCIE_RX or PCIE_RX or PCIE_TX or PCIE_TX_C
38,DDR4_B0 or DDR4_B1 or DDR4_B2 or DDR4_B3
39,DDR4_0 or DDR4_1 or DDR4_2 or DDR4_3

我真的不知道从哪里开始。你知道吗


Tags: or文件b0rxpandaexeb2class
1条回答
网友
1楼 · 发布于 2024-09-30 23:42:43

您可以使用itertools.groupby。你知道吗

import csv, itertools
with open("data.csv") as f:
    data = list(csv.reader(f))
    key = lambda row: row[3]
    data = sorted(data, key=key) # if not already sorted by same key
    groups = itertools.groupby(data, key=key)
    for k, grp in groups:
        print(k, *(g[1] for g in grp))

输出:

25 USB3
31 PCIE_CLK PCIE_RX PCIE_TX PCIE_TX_C
38 DDR4_B0 DDR4_B1 DDR4_B2 DDR4_B3
39 DDR4_ADDR DDR4_0 DDR4_1 DDR4_2 DDR4_3

相关问题 更多 >