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

是否有更快的方法来运行以下代码:(检查 中的值是否在多个列表中,如果是,它会将字符串附加到一个列表,将索引附加到另一个列表)df.index


truth = []

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


月关宝盒
浏览 85回答 2
2回答

慕婉清6462132

您可以制作一个大的“索引”字典,而不是检查单独中的键。在我的示例中,我建议 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

四季花海

基于解决方案。 返回两个可迭代对象之间的所有匹配位置。我们通过迭代您的指数段(即等)逐个找到此匹配位置。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 groupfor i, idx_group in enumerate([t4, t8, mono, nk, b]):    truth[np.where(np.in1d(df.index.values, idx_group))[0]] = chr(97+i)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python