Объединение всех строк CSV-файла с одним значением столбца в Python

У меня есть файл CSV, который выглядит примерно так:

['Name1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '+']
['Name1', '', '', '', '', '', 'b', '', '', '', '', '', '', '', '', '' , '', '', '', '', '']
['Name2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a', '']
['Name3', '', '', '', '', '+', '', '', '', '', '', '', '', '', '', '' , '', '', '', '', '']

Теперь мне нужен способ присоединиться ко всем строкам, которые имеют одно и то же имя первого столбца в один столбец, например:

['Name1', '', '', '', '', '', 'b', '', '', '', '', '', '', '', '', '' , '', '', '', '', '+']
['Name2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a', '']
['Name3', '', '', '', '', '+', '', '', '', '', '', '', '', '', '', '' , '', '', '', '', '']

Я могу придумать способ сделать это, отсортировав CSV, а затем перейдя через каждую строку и столбец и сравните каждое значение, но, вероятно, должен быть более простой способ сделать это.

Есть идеи?

  • Выбор значения из раскрывающегося списка с использованием selenium python
  • Декодирование шестнадцатеричной строки в Python 3
  • Как я могу получить доступ к локальным переменным каталога в моих основных режимах?
  • Можно ли использовать python с инструкцией для условного выполнения?
  • Как разобрать заголовочный файл C?
  • В чем разница между venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv и т. Д.?
  • SimPy Resource 3, каждый из которых имеет разные характеристики
  • Запись динамиков с помощью PyAudio
  • 3 Solutions collect form web for “Объединение всех строк CSV-файла с одним значением столбца в Python”

    Вы должны использовать itertools.groupby:

    t = [ ['Name1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '+'], ['Name1', '', '', '', '', '', 'b', '', '', '', '', '', '', '', '', '', '', '', '', '', ''], ['Name2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a', ''], ['Name3', '', '', '', '', '+', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] ] from itertools import groupby # TODO: if you need to speed things up you can use operator.itemgetter # for both sorting and grouping for name, rows in groupby(sorted(t), lambda x:x[0]): print join_rows(rows) 

    Очевидно, что вы реализуете слияние в отдельной функции. Например, например:

     def join_rows(rows): def join_tuple(tup): for x in tup: if x: return x else: return '' return [join_tuple(x) for x in zip(*rows)] 
     def merge_rows(row1, row2): # merge two rows with the same name merged_row = ... return merged_row r1 = ['Name1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '+'] r2 = ['Name1', '', '', '', '', '', 'b', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] r3 = ['Name2', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a', ''] r4 = ['Name3', '', '', '', '', '+', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] rows = [r1, r2, r3, r4] data = {} for row in rows: name = row[0] if name in data: data[name] = merge_rows(row, data[name]) else: data[name] = row 

    Теперь у вас есть все строки в data где каждый ключ этого словаря – это имя, а соответствующее значение – это строка. Теперь вы можете записать эти данные в файл CSV.

    Вы также можете использовать defaultdict :

     >>> from collections import defaultdict >>> d = defaultdict(list) >>> _ = [d[i[0]].append(z) for i in t for z in i[1:]] >>> d['Name1'] ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '+', '', '', '', '', '', 'b', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] 

    Затем присоедините свою колонку

    Python - лучший язык программирования в мире.