在两个数据帧之间执行相等性检查

时间:2017-09-20 09:49:05

标签: python pandas validation dataframe

我有两个数据框

df包含头部看起来像的原始数据(这有几千条记录):

0   Floor    Dept   .....more fields
1   1        Kitchen
2   1        Electrical
3   2        DIY
4   3        Music

validation这是一个明确的列表,其中哪个部门在哪个楼层

Floor Dept
G     Food
1     Kitchen
1     Electrical
1     Toys
2     Electrical
3     Music 

有没有办法使用validation数据框来检查右侧部门是否位于df的右侧?使用两个valadation列将用于检查2 df列。

所以它会在df像厨房在3楼(实际上是在1楼)时发现错误

非常感谢

2 个答案:

答案 0 :(得分:2)

您可以对数据帧进行特征化并进行isin检查。

val = validation.apply(tuple, 1).values
if ~df[['Floor', 'Dept']].apply(tuple, 1).isin(val).all():
    print('Invalid Entries')

如果你只是想获得一个布尔掩码,那么应该这样做:

mask = df[['Floor', 'Dept']].apply(tuple, 1).isin(val)

如果validation的索引中有Floor,请在apply之前重置。

val = validation.reset_index().apply(tuple, 1).values

答案 1 :(得分:1)

如果验证看起来像我首先

  validation = validation.reset_index()

将索引放入列中。然后,如果我的问题正确,请尝试合并df和验证

  df_validation = pd.merge(validation,df, on=["Floor","Dept"])

尝试内部,左侧和右侧连接以获得最佳表示。这对你有帮助吗?