从熊猫数据框中包含其其中一列作为列表的行中删除行,当其值之一与另一个数据框中另一个比较列表列中的值匹配时。
这是第一数据框列: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))]
但是这些无济于事
答案 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,因为您要询问第二个列表是否包含第一个。