比较 2 Pandas Dataframes 并返回所有不同的行

我有 2 个具有相同架构和不同数据的数据帧。我想比较它们并获取任何列具有不同值的所有行。


“df1”:


id   Store         is_open

1   'Walmart'      true

2   'Best Buy'     false

3   'Target'       true

4   'Home Depot'   true

“df2”:


id   Store         is_open

1   'Walmart'      false

2   'Best Buy'     true

3   'Target'       true

4   'Home Depot'   false

我能够得到差异,但我没有得到所有的列,而只是那些已经改变的列。所以我得到以下输出:


结果_df:


id   is_open  is_open

1   true       false

2   false      true

4   true       false

这是实现上述输出的代码:


ne_stacked = (from_aoi_df != to_aoi_df).stack() 

changed = ne_stacked[ne_stacked]

changed.index.names = ['id', 'col_changed']


difference_locations = np.where(from_aoi_df != to_aoi_df)

changed_from = from_aoi_df.values[difference_locations]

changed_to = to_aoi_df.values[difference_locations]

df5=pd.DataFrame({'from': changed_from, 'to': changed_to})

df5

但是,除了上述结果之外,我还想要添加 Store 列的所有相同列,因此我的预期输出是:


expected_result_df:

        id Store         is_open_df1  is_open_df2    

        1   Walmart       true        false 

        2   Best Buy      false       true        

        4   Home Depot    true        false 

我怎样才能做到这一点?


潇湘沐
浏览 351回答 3
3回答

紫衣仙女

使用熊猫merge功能df = pd.merge(df1,df2[['id','is_open']],on='id')过滤掉列不相等的is_open行df = df[df["is_open_x"]!=df["is_open_y"]]df要rename列作为您的期望df.rename(columns={"is_open_x":"is_open_df1","is_open_y":"is_open_df2"})

ITMISS

这个怎么样?df1['is_open_df2'] = df2['is_open']expected_result_df = df1[df1['is_open'] != df1[is_open_df2']]

三国纷争

如果数据帧的长度不同。这是你可以使用的东西。new_df = pd.concat([df1, df2]).reset_index(drop=True) df = new_df.drop_duplicates(subset=['col1','col2'], keep=False)这将为您提供一个名为 df 的数据框,其中仅包含不同的记录。其中 df1 和 df2 是您要比较的两个数据框。子集=要为其查找重复项的列列表。keep= false 将删除与其原始值相同的值。keep=last 将保留第二个数据帧中的记录。keep=first 将保留第一个数据帧中的记录。如果数据帧的长度相同df=np.where(df1==df2,'true','false')希望这可以帮助!!如果 df1 和 df2 具有唯一值,则有效……在使用此之前,您可以删除其中存在的重复项。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python