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)
我有一个 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)