我有一个(112,7)形状的NumPy字符串数组。前几个元素只是字母,其余的是数字,如下所示
List[0] = array(['ID32', 'TRED', 'PLUS', '434','0.34', '11.9', '4.8'], dtype='<U14')
List[1] = array(['ID32', 'TRED', 'PLUS', '994','0.84', '44.3', '1.11'], dtype='<U14')
List[2] = array(['ID32', 'PROP', 'MINUS', '234','0.56', '44.3', '1.11'], dtype='<U14')
我想要实现的是IF语句检查前三个元素,如果它们相同,则计算第四个和第五个元素的比率,并从列表中删除较小的元素
例如List[0]
和List[1]
具有相同的前三个元素,因此检查比率(434/0.34 = 1276.5
,994/0.84 = 1183
),因此List[1]
较小,应该从列表中删除
这是我失败的尝试
for i, val in enumerate(List):
if val[i][0] == val[i][1]
print(val[3].astype(np.float)/val[4].astype(np.float))
谢谢你的帮助
首先制作一个掩码来跟踪要保留的行,并转换数字列:
然后循环编辑要保留的行的掩码:
现在您有了
keep
作为array([ True, False, True])
,您可以很容易地使用它来获得最终结果:给你:
如果匹配字符串的数量与行总数相比较小,则这可能会更快:
这样代码仍然是可读的,但是循环只是迭代匹配的数量,而不是行的数量
如果您愿意使用
pandas
:结果:
相关问题 更多 >
编程相关推荐