Python 加快IF/ELIF搜索多个列表中的索引?

Python 加快IF/ELIF搜索多个列表中的索引?,python,pandas,list,if-statement,Python,Pandas,List,If Statement,是否有一种更快的方法来运行以下代码:(检查df.index中的值是否在多个列表中,如果在多个列表中,它会将字符串附加到一个列表,并将索引附加到另一个列表) 如果t4、t8、mono、nk和b是带有索引值(int)的独立列表您可以制作一个大的“索引”目录,而不是检查单独目录中的键。 在我的示例中,我建议t4或t8是dits。如果你有dictst4={'t4_1':'value_1','t4_2':'value_2'}和t8={'t8_1':'value_1','t8_2':'value_2'}。在

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

如果
t4、t8、mono、nk
b
是带有索引值(int)的独立列表

您可以制作一个大的“索引”目录,而不是检查单独目录中的键。 在我的示例中,我建议t4或t8是dits。如果你有dicts
t4={'t4_1':'value_1','t4_2':'value_2'}
t8={'t8_1':'value_1','t8_2':'value_2'}
。在这里,你不在乎价值观<代码>如果t4中的ind表示您在t4 dict中选中了键
ind
dict.from_键(t4.keys(),'a')
将使dict
{'t4_1':'a','t4_2':'a'}。
dict.update()`只需更新dict中的所有键。在这里,您将如何使用所需的值对所有键进行索引

如果t4和t8是列表或集合,则是足够的
dict.from_键(t4,'a')

idx={}
update(dict.fromkeys(t4.keys(),'a'))
update(dict.fromkeys(t8.keys(),'b'))
update(dict.fromkeys(nk.keys(),'c'))
update(dict.fromkeys(mono.keys(),'d'))
update(dict.fromkeys(b.keys(),'e'))
truth=[idx.get(ind,'Other'),用于df.index.values中的ind
t_ind=df.index.values

A
numpy
为基础的解决方案
np.in1d
返回两个iterable之间的所有匹配位置。我们通过迭代您的索引段,即
t4
t8
等,一个一个地找到匹配的位置。这是对RHS的一种廉价攻击,具有
chr(97)='A'

#创建一个列表,其中所有元素均为“其他”
真值=名词重复('Other',len(df))
#迭代索引组,并使用匹配组输入真值
对于枚举中的i,idx_组([t4,t8,mono,nk,b]):
真值[np.where(np.inad(df.index.values,idx_组))[0]=chr(97+i)

如果列表很大,最好将其设置为集合,因为成员资格检查是O(1)。谢谢。你的意思是
(t4,'a'))
而不是
(t4.keys(),'a'))
在答案正文中回答。这是建议您使用dicts的代码。如果您有列表或集合,您可以只使用
(t4,'a'))
也可以回答下面的问题,尝试使用熊猫。也许如果你使用熊猫框架,这应该是你如何对熊猫进行条件更新的方法
df[df.index.isin(t4)]='a';df[df.index.isin(t8)]='b'…
请不要只发布代码作为答案,还要解释代码的作用以及如何解决问题。有解释的答案通常质量更高,更有可能吸引更多的选票。很公平,我一回到办公桌就可以编辑了。谢谢你的指点。
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)