替换for循环以从具有多个列表的数据框中过滤值

时间:2018-08-22 07:15:31

标签: python python-3.x pandas dataframe

我有两个列表:list1和list2,以及一个数据帧:df1。我正在使用一些过滤器将一些from_account值附加到空列表p。

list1的几个值= [128195,101643,143865,59455,108778,66042,138456,66043]

和list2的几个值= [128594、128599、128596、128588、128168、125410、127166、127078]

p=[]
for i in list1:
    for j in list2:
        ss=df1[df1.to_account==i]
        for k in range(0,len(ss.from_account)):
            if(ss.from_account.values[k]==j):
                p.append(j)

使用循环需要花费大量的执行时间,是否有其他选择可以实现相同的结果,但执行时间却最少。

1 个答案:

答案 0 :(得分:0)

看起来ss.from_account.values是一个列表,因此您无需检查变量k即可遍历它,而只需检查该值是否在该列表中即可:

p=[]
for i in list1:
    ss=df1[df1.to_account==i]
    for j in list2:
        if j in ss.from_account.values:
            p.append(j)

我进一步将ss的声明移到了第二个循环之外,所以您只做了一次。我想您甚至可以进一步优化它:

p=[]
for i in list1:
    ss=df1[df1.to_account==i]
    p += [j for j in list2 if j in ss.from_account.values]