Вопрос:
Я пытаюсь сравнить две строки в csv. Например:
abc, 2, foo, bar, baz abc, 2, bar,baz, band cab, 3, baz,bar, foo cab, 3, baz,bar, foo
Есть ли способ csv module или любой модуль в python, чтобы проверить, является ли столбец 1 одинаковым или другим.
Например: в первых двух строках мы видим 2 а в третьей строке – число 3. есть ли способ найти это
Идея заключается в том, чтобы суммировать значения, соответствующие конкретному значению в column 1
так,
abc, 2, 10,11,12 abc, 2, 7,8,9 cab, 3, 4,5,6 cab, 3, 1,2,3
Я по существу хочу суммировать значения 12+9 так как он имеет тот же столбец 1 и числа 6 and 3 поскольку значение 3 одинаково в столбце 1
Подводя итог, я предполагаю, что могу создать список с
a=list()
добавьте значение в этот список
a.append(float(line[4]))
и используйте numpy для подведения итогов
numpy.sum(a)
Может ли кто-нибудь помочь мне разобраться в питоническом способе найти, являются ли эти два значения одинаковыми.
Лучший ответ:
Что-то вроде этого:
>>> from collections import Counter >>> c = Counter() with open(‘abc’) as f: reader = csv.reader(f, delimiter = ‘,’, skipinitialspace = True) for row in reader: c[row[1]] += int(row[-1]) … >>> c Counter({‘2’: 21, ‘3’: 9})
Чтобы найти столбцы, используйте itertools.groupby:
>>> with open(‘abc’) as f: reader = csv.reader(f, delimiter = ‘,’, skipinitialspace = True) for k,g in groupby(enumerate(reader), key = lambda x:x[1][1]): print k,» was common on the rows :»,»,».join(str(x[0]) for x in g) … 2 was common on the rows : 0,1 3 was common on the rows : 2,3 Ответ №1
Посмотрите на библиотеку pandas, вы можете легко объединить столбцы на основе групп. Например, если у вас есть csv:
col1,col2,col3,col4,col5 abc,2,10,11,12 abc,2,7,8,9 cab,3,4,5,6 cab,3,1,2,3
Вы можете группировать и суммировать на основе значений в col2 только с несколькими строками кода:
import pandas as pd df = pd.DataFrame.from_csv(‘test.csv’) df.groupby(‘col2’).sum()
Что дает вам:
col3 col4 col5 col2 2 17 19 21 3 5 7 9 Ответ №2
Вы можете использовать группу python по функциям http://docs.python.org/2/library/itertools.html#itertools.groupby
from itertools import groupby grouped = groupby(data, lambda x: x[1])
это даст вам данные, сгруппированные по второй колонке. Затем вы можете получить сумму за каждый ключ:
for key, values in grouped: columnSum = sum(map(lambda x: int(x[4]), values))