Python:计算一行中的项目是否一起出现在前面的行中

Python: count if items in a row appears in previous rows together

我有一个 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(和任何其他编程语言)的新手,只是不知道。非常感谢你的帮助。

我会保留一个 "previously seen sets" 的列表,并在我走的时候检查交叉口的大小。即,假设 headers 实际上不存在并且那些方括号是幻影(如果损坏则很容易修复前一个假设 - 如果您知道第一行 "blind" 是 [=17 则读取并写回第一行=];如果第二个假设破坏了文件的 不是 有效的 CSV...:-)...:[=​​11=]

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)