我有一个基本数据框如下-

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]]))]

08-24 18:49
查看更多