我有三个定义了df1、df2和df3的数据帧。我需要一个简单的方法来找到df1,df2和df3之间不匹配的记录。它与这些数据帧的交集相反。如果我将其与SQL world进行比较,则可以通过在这三个表之间进行左外部连接并对空列进行过滤来获得不匹配的记录。如何在Python中轻松做到这一点?
发布于 2017-02-14 12:08:09
如果您想通过数据帧的特定列进行连接,您可以这样做:
indexes = df1[(df1[TARGET_COLUMN]!=df2[TARGET_COLUMN]) | (df1[TARGET_COLUMN]!=df3[TARGET_COLUMN])].index
其中TARGET_COLUMN应为列的名称。
如果要在整行之间进行比较,可以使用:
def compare_indexes(x):
index = x.name
for column_name in df1.columns.values:
if not (x[column_name] == df2.iloc[index,:][column_name] == df3.iloc[index,:][column_name]):
return False
return True
df1["match"] = df1.apply(compare_indexes, axis=1)
indexes = df1[df1["match"]==False].index
发布于 2017-02-14 13:05:21
merged_df = pd.merge(df1, df2, how='outer', on='[your index]').merge(df3, how='outer', on='[your index]')
result = merged_df.loc[~merged_df.index.isin(merged_df.dropna().index)]
结果就是你想要的。
https://stackoverflow.com/questions/42225123
复制相似问题