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



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

这是第一个数据框列:在此处输入图像描述

另一个数据框列在这里:在此处输入图像描述

我尝试了很多代码

Revdf=Revdf.drop(lambda x: [i for i in Revdf.AffiliationHistory if i in Authdf.Affiliations.values], axis=1(

Revdf=Revdf[~(Revdf.AffiliationHistory.isin(Authdf.Affiliations.values((]

但这些都无济于事

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

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,因为您询问第二个列表是否包含第一个列表。

最新更新