为了账号安全,请及时绑定邮箱和手机立即绑定

加快 IF/ELIF 在多个列表中的索引搜索速度?

加快 IF/ELIF 在多个列表中的索引搜索速度?

月关宝盒 2022-09-20 17:53:25
是否有更快的方法来运行以下代码:(检查 中的值是否在多个列表中,如果是,它会将字符串附加到一个列表,将索引附加到另一个列表)df.indextruth = []t_ind = []for ind in df.index.values:    if ind in t4:        truth.append('a')        t_ind.append(ind)    elif ind in t8:        truth.append('b')        t_ind.append(ind)    elif ind in nk:        truth.append('c')        t_ind.append(ind)    elif ind in mono:        truth.append('d')        t_ind.append(ind)    elif ind in b:        truth.append('e')        t_ind.append(ind)    else:        truth.append('Other')        t_ind.append(ind)其中 和 是具有索引值 (int) 的单独列表t4, t8, mono, nkb
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您可以制作一个大的“索引”字典,而不是检查单独中的键。在我的示例中,我建议 t4 或 t8 是 dits。如果您有字典和.在这里,你不介意价值观。 表示您在 t4 字典中检查密钥。 将使词典dict.update()'只是更新词典中的所有键,在这里你将如何用你需要的值索引所有键。t4 = {'t4_1':'value_1', 't4_2': 'value_2'}t8 = {'t8_1': 'value_1', 't8_2': 'value_2'}if ind in t4inddict.from_keys(t4.keys(), 'a'){'t4_1':'a', 't4_2':'a'}'.


如果 t4 和 t8 是列表或集合,是的,这就足够了。dict.from_keys(t4, 'a')


    idx = {}

    idx.update(dict.fromkeys(t4.keys(), 'a'))

    idx.update(dict.fromkeys(t8.keys(), 'b'))

    idx.update(dict.fromkeys(nk.keys(), 'c'))

    idx.update(dict.fromkeys(mono.keys(), 'd'))

    idx.update(dict.fromkeys(b.keys(), 'e'))


    truth = [idx.get(ind, 'Other') for ind in df.index.values]

    t_ind = df.index.values


查看完整回答
反对 回复 2022-09-20
?
四季花海

TA贡献1811条经验 获得超5个赞

基于解决方案。 返回两个可迭代对象之间的所有匹配位置。我们通过迭代您的指数段(即等)逐个找到此匹配位置。RHS上的廉价黑客numpynp.in1dt4t8chr(97) = 'a'


# create a list with all the elements as 'Others' 

truth = np.repeat('Other', len(df))


# iterate over index groups and impute truth with the matching group

for i, idx_group in enumerate([t4, t8, mono, nk, b]):

    truth[np.where(np.in1d(df.index.values, idx_group))[0]] = chr(97+i)


查看完整回答
反对 回复 2022-09-20
  • 2 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信