(Python)如何按第一列分组,而不是按顺序排序?

2024-09-26 18:04:42 发布

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

我有一个结构非常奇怪的csv文件。列字段由数字组成,行按第一列字段进行部分分组,但不完全分组。 例如,如果列数据是{number1,number2,number3},则文件将如下所示:

321,12,4932
321、32、4643
321、953921

143、98、2432
143、28、3910

832、43、2910
832、542190

572、91、8492
572、92、9302
572、15、3902

321、937281
321、48、6218

832,78,0148
832,91,7281

问题是,我需要按照第一列对文件进行完美分组,因此上面的示例应该是:

321、124932
321、32、4643
321、95、3921
321、93、7281
321、48、6218

143、98、2432
143、28、3910

832、43、2910
832、54、2190
832、78、0148
832、91、7281

572、91、8492
572、92、9302
572、15、3902
... 在

。。同时,正如上面所示,第一列不应该按顺序排序。我需要第一列的顺序是相同的(这听起来可能很奇怪,但是由于它是部分分组的,所以在很大程度上它有一定的顺序)。在

解决这个问题最快的算法是什么?在


Tags: 文件csv数据算法示例排序顺序数字
3条回答

将行排列成列表,这些列表存储在由第一列键入的dict中。如果您希望保留从原始电子表格读取它们的顺序,请使用OrderedDict。类似这样的东西(未测试的代码)

from collections import OrderedDict
...
d = OrderedDict()

# open the csv file as reader

for row in reader:
    key = row[0]
    d.setdefault(key,[]).append(row)

并使用结果

^{pr2}$

您可以尝试硬编码,但对于Python中的CSV文件,我建议使用Pandas。Pandas是Python的import,专门为CSV文件创建。您可以相当简单地对数据集进行排序、分组、创建等。您还可以读取CSV文件并创建自定义列和行。例如:

import pandas as pd
df = pd.DataFrame({'A' : [321,143,832]})

我将留下一些文档链接,您可以在那里找到最适合您在Python中实现的函数。 Basic Tutorial .Scroll to GroupingTutorial with Examples

最简单和最快的方法是使用熊猫为您的CSV

在分析文件时,可以使用列表和字典,使用字典按第一行对行进行分组,使用列表保留第一行的顺序:

grouped_rows = {}
rows = []
with open("your_file") as ins:
    for line line in ins:
        first = line.split(",")[0]
        if first in rows:
            grouped_rows[first].append(line)
            continue
        rows.append(first)
        grouped rows[first] = [line]

然后,只需解析列表并从字典中检索数据,就可以打印它们:

^{pr2}$

相关问题 更多 >

    热门问题