Python:如果一行中的项出现在前一行中,则计数

2024-04-27 02:26:44 发布

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

我有一个CSV文件,当我用python读取它时,它看起来是这样的:

Column A       B     C
['2002.09.11', 'a', 'b']
['2002.09.11', '', 'b,c']
['2002.09.19', 'd', 'e']
['2002.10.02', 'a,b', 'c']

如果最后两列中的任何两个元素同时出现在前面的行中,我想添加一个计数为1的列。(行按时间顺序排序)如下所示:

Column A       B     C     D
['2002.09.11', 'a', 'b',   0] 
['2002.09.11', '', 'b,c',  0]
['2002.09.19', 'd', 'e',   0]
['2002.10.02', 'a,b', 'c', 1]

为了更好地理解,B、C列中的元素(如“a”、“B”…)是人名,我想看看他们以前是否有过一起工作的经历。你知道吗

我该怎么做?我对python(和任何其他编程语言)都不熟悉,只是不知道。我将感谢你的帮助。你知道吗


Tags: 文件csv元素排序顺序时间column编程语言
1条回答
网友
1楼 · 发布于 2024-04-27 02:26:44

我会保留一个“以前见过的集合”的列表,并检查交叉口的大小。也就是说,假设文件头实际上不在那里,而那些方括号是幻影(很容易修复前一个假设,如果你知道第一行是头,读写第一行“盲”;如果第二个假设被破坏,文件的不是有效的CSV…:-)…:

seen_sets = []
to_write = []

with open('input.csv', 'rb') as fin:
    r = csv.reader(fin)
    for row in r:
        newset = set(r[1].split(',')).union(r[2].split(','))
        prev = any(len(s.intersection(newset)) > 1 for s in seen_sets)
        seen_sets.append(newset)
        row.append('1' if prev else '0')
        to_write.append(row)

with open('output.csv', 'wb') as fou:
    w = csv.writer(fou)
    w.writerows(to_write)

相关问题 更多 >