当数组行中多次出现时创建集合
Create set when several occurences in row of array
我有一个数组 A,如果该行中有一定数量的 'na',我想获取其中项目名称的第一部分(存储在第 0 列),然后存储集合中名称的第一部分(在“-”之前)。
如果我在一行中只查找一个 'na',我的代码就可以工作。但我不知道如何将其调整为例如>2 'na' 秒。我尝试使用 .count() 函数执行此操作,但随后收到错误消息,提示我无法在数组中使用它。
todelete = set(row[0].split(" - ", 1)[1] for row in A[0:] if 'na' in row)
我的输入 A 与以下示例具有相同的形式,我想将字符串 'BCDE' 存储在我的集合中。
A = (['A - BCDE', '3413', '4354', '6655', '6573', '7523', 'na'],
['A - CDEF', '7663', '5332', '2364', '1263', '3234', '4343'],
['B - BCDE', 'na', 'na', '3443', 'na', '4153', '1223'],
['B - CDEF', '3456', '8756', '3456', '2345', '3456', '1234'])
假设 A
中的所有值都是字符串:
set(row[0].split(" - ", 1)[1] for row in A[0:]
if len(filter(lambda item: 'na' in item, row)) > 2)
如果只需要 'na'
A
的精确值:
set(row[0].split(" - ", 1)[1] for row in A[0:]
if len(filter(lambda item: 'na' == item, row)) > 2)
这个例子:
A = (['A - BCDE', '3413', '4354', '6655', '6573', '7523', 'na'],
['A - CDEF', '7663', '5332', '2364', '1263', '3234', '4343'],
['B - BCDE', 'na', 'na', '3443', 'na', '4153', '1223'],
['B - CDEF', '3456', '8756', '3456', '2345', '3456', '1234'])
将输出集合:
{'BCDE'}
如果行值不限于字符串,则需要在过滤器函数中进行类型检查:
set(row[0].split(" - ", 1)[1] for row in A[0:]
if len(filter(lambda item: isinstance(item, str) and 'na' in item, row)) > 2)
看起来你的问题实际上是如何计算 numpy 数组中 'na'
的出现次数。没有对应的函数,但是很容易写一个:
def count(a, v):
return a[a == v].size
然后:
todelete = set(row[0].split(" - ", 1)[1] for row in A[0:] if count(row, 'na') > 2)
我有一个数组 A,如果该行中有一定数量的 'na',我想获取其中项目名称的第一部分(存储在第 0 列),然后存储集合中名称的第一部分(在“-”之前)。
如果我在一行中只查找一个 'na',我的代码就可以工作。但我不知道如何将其调整为例如>2 'na' 秒。我尝试使用 .count() 函数执行此操作,但随后收到错误消息,提示我无法在数组中使用它。
todelete = set(row[0].split(" - ", 1)[1] for row in A[0:] if 'na' in row)
我的输入 A 与以下示例具有相同的形式,我想将字符串 'BCDE' 存储在我的集合中。
A = (['A - BCDE', '3413', '4354', '6655', '6573', '7523', 'na'],
['A - CDEF', '7663', '5332', '2364', '1263', '3234', '4343'],
['B - BCDE', 'na', 'na', '3443', 'na', '4153', '1223'],
['B - CDEF', '3456', '8756', '3456', '2345', '3456', '1234'])
假设 A
中的所有值都是字符串:
set(row[0].split(" - ", 1)[1] for row in A[0:]
if len(filter(lambda item: 'na' in item, row)) > 2)
如果只需要 'na'
A
的精确值:
set(row[0].split(" - ", 1)[1] for row in A[0:]
if len(filter(lambda item: 'na' == item, row)) > 2)
这个例子:
A = (['A - BCDE', '3413', '4354', '6655', '6573', '7523', 'na'],
['A - CDEF', '7663', '5332', '2364', '1263', '3234', '4343'],
['B - BCDE', 'na', 'na', '3443', 'na', '4153', '1223'],
['B - CDEF', '3456', '8756', '3456', '2345', '3456', '1234'])
将输出集合:
{'BCDE'}
如果行值不限于字符串,则需要在过滤器函数中进行类型检查:
set(row[0].split(" - ", 1)[1] for row in A[0:]
if len(filter(lambda item: isinstance(item, str) and 'na' in item, row)) > 2)
看起来你的问题实际上是如何计算 numpy 数组中 'na'
的出现次数。没有对应的函数,但是很容易写一个:
def count(a, v):
return a[a == v].size
然后:
todelete = set(row[0].split(" - ", 1)[1] for row in A[0:] if count(row, 'na') > 2)