从熊猫数据框中删除包含其中一个列作为列表的行,当其中一个值与另一个比较列表中的值匹配时

时间:2018-08-14 15:58:08

标签: dataframe

从熊猫数据框中包含其其中一列作为列表的行中删除行,当其值之一与另一个数据框中另一个比较列表列中的值匹配时。

这是第一数据框列:enter image description here

,其他数据框列在此处:enter image description here

我尝试了很多代码

Revdf = Revdf.drop(lambda x:[如果i在Authdf.Affiliations.values中,则i在Revdf.AffiliationHistory中为i,i =轴= 1)

Revdf = Revdf [〜(Revdf.AffiliationHistory.isin(Authdf.Affiliations.values))]

但是这些无济于事

1 个答案:

答案 0 :(得分:0)

必须有一种更简单的方法,但是我为此编写了一个函数,并且可以正常工作:

def remove_row(df1,x1,y1,df2,x2,y2):
    assert type(df1.loc[x1,y1])==list,"type have to be list"
    assert type(df2.loc[x2,y2])==list,"type have to be list"

    flag =False
    l1=df1.loc[x1,y1]
    print(l1)
    l2=df2.loc[x2,y2]
    print(l2)
    for i in l1:
        if i in l2:
            flag=True
            break
    if flag==True:
        return df1.drop(x1)
    else:
        return df1

x是行索引,y是列名,在综合数据上进行了尝试,并且有效:

df1=pd.DataFrame({'col1':[0,0,0,0,1],
'col2':[[1,2,3,4],0,0,0,0]})
df2=pd.DataFrame({'col1':[0,0,0,0],
'col2':[[0,0,0,4],0,0,0]})

remove_row(df1,0,'col2',df2,0,'col2')

此外,我认为您正在犯的一个错误是:

[1,2,3,4] in [0,1,2,3,4]

将返回false,因为您要询问第二个列表是否包含第一个。