皈依舞
第一个concatDataFrames 在一起:df = (pd.concat([df1, df2], keys=('df1','df2')) .rename_axis(('df_name','idx')) .reset_index(level=1, drop=True) .reset_index())print (df) df_name id column1 column20 df1 1 30 901 df1 2 1 22 df2 1 30 903 df2 3 1 2然后得到所有相同的id:a = df1.merge(df2, on='id')['id']最后过滤器isin:df = df[~df['id'].isin(a)]print (df) df_name id column1 column21 df1 2 1 23 df2 3 1 2编辑:类似@WB的解决方案,只添加了参数id和suffixes:df = (df1.merge(df2,indicator=True,how='outer', on='id', suffixes=('_df1','_df2')) .query("_merge != 'both'"))df['_merge'] = df['_merge'].map({'left_only':'df1','right_only':'df2'})print (df) id column1_df1 column2_df1 column1_df2 column2_df2 _merge1 2 1.0 2.0 NaN NaN df12 3 NaN NaN 1.0 2.0 df2如果想要所有行,也需要相同的行id:df['_merge'] = df['_merge'].map({'left_only':'df1','right_only':'df2', 'both':'df1+df2'})print (df) id column1_df1 column2_df1 column1_df2 column2_df2 _merge0 1 30.0 90.0 30.0 90.0 df1+df21 2 1.0 2.0 NaN NaN df12 3 NaN NaN 1.0 2.0 df2