我有一个基本数据框如下-
df1_data = {'id' :{0:'101',1:'102',2:'103',3:'104',4:'105'},
'sym1' :{0:'abc',1:'pqr',2:'xyz',3:'mno',4:'lmn'}}
df1 = pd.DataFrame(df1_data)
print df1
id sym1
0 101 abc
1 102 pqr
2 103 xyz
3 104 mno
4 105 lmn
从这个dataframe中,我想检查一下列sym1是否在其他四个dataframes列中可用?
四种不同的数据帧:
df2_data = {'sym2' :{0:'abc',1:'xxx',2:'xyz',3:'mno'},
'name' :{0:'a',1:'b',2:'c',3:'d'}}
df2 = pd.DataFrame(df2_data)
print df2
df3_data = {'sym2' :{0:'abc',1:'xxx',2:'xyz',3:'mno'},
'name' :{0:'h',1:'i',2:'k',3:'l'}}
df3 = pd.DataFrame(df2_data)
print df3
df4_data = {'sym2' :{0:'abc',1:'xxx',2:'xyz',3:'mno'},
'name' :{0:'p',1:'q',2:'r',3:'s'}}
df4 = pd.DataFrame(df4_data)
print df4
df5_data = {'sym2' :{0:'abc',1:'xxx',2:'xyz',3:'mno'},
'name' :{0:'w',1:'x',2:'y',3:'z'}}
df5 = pd.DataFrame(df5_data)
print df5
在数据帧df2、df3、df4、df5中可用的列sym2中,可能包含相同的符号,也可能不包含相同的符号我的意图是检查在df2、df3、df4、df5数据帧中是否有sym1列值sym2列值?
预期产量-
id sym1
0 102 pqr
1 105 lmn
结论-
符号pqr和lmn在数据帧df2、df3、df4和df5的sym2列中不可用。
最佳答案
使用isin
检查df1.sym1
的每个元素是否在其他iterable中
使用pd.concat
将所有其他数据帧串在一起
df1[~df1.sym1.isin(pd.concat([df2, df3, df4, df5]).sym2)]
id sym1
1 102 pqr
4 105 lmn
numpy
速度快3倍的变体df1[~df1.sym1.isin(np.concatenate([d.sym2.values for d in [df2, df3, df4, df5]]))]