我正在尝试比较csv中的两行。 例如:
abc, 2, foo, bar, baz
abc, 2, bar,baz, band
cab, 3, baz,bar, foo
cab, 3, baz,bar, foo
是否有csv
模块或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)
任何人都可以帮我找出一种pythonic方法来查找两个值是否相同。
答案 0 :(得分:1)
这样的事情:
>>> 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 :(得分: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 :(得分:0)
你可以按功能使用python group 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))