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

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

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

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

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

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

Есть идеи?

  • Как конвертировать JSON в CSV?
  • разделитель списков csv python на основе региональных настроек
  • Печать различной точности по столбцу с помощью pandas.DataFrame.to_csv ()?
  • Общая поддержка Unicode / UTF-8 для файлов csv в Python 2.6
  • «Строка содержит NULL-байт» в CSV-ридере (Python)
  • cvv поведение читателя с None и пустой строкой
  • Как сжать файл csv в zip-архив напрямую?
  • Как два слияния нескольких CSV-файлов по горизонтали с python?
  • 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', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] 

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

    Interesting Posts

    PyCrypto: AssertionError («Ошибка PID не выполнена. RNG должен быть повторно инициализирован после fork (). Подсказка: попробуйте Random.atfork ()»)

    Нужен быстрый способ подсчета и суммирования итерации за один проход

    Django Rest Framework ListField и DictField

    Как перезапустить программу на основе ввода пользователем?

    Как установить несколько элементов в перетаскивание GtkSelection для Treeview

    Передача байтов в качестве параметра в c #?

    Почему в Python не сообщалось об ошибках многопроцессорности и о том, как включать ошибки отчетности?

    Передача массива / списка в Python

    Индикатор выполнения не обновляется во время работы

    ValueError: неверный литерал для int () с базой 10: ''

    Как я могу подключиться к owncloud с помощью python с помощью easywebdav?

    Загрузка metagraph и контрольных точек в тензорном потоке

    PyQt QFileDialog – выбор нескольких каталогов

    как изменить значение переменной в файле python из сценария python

    Программирование на OS X Bluetooth

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