我有两个pandas dataframes如下:
df1=pd.DataFrame({'A':[1,2,3],'B':[2,3,4]}) df2=pd.DataFrame({'A':[1,2,4],'B':[2,2,5]})
下面的代码给了我两个 Dataframe 之间的区别,如何从df2中只得到更改?
changed_rows = pd.concat([df1, df2]).drop_duplicates(keep=False)
3b6akqbq1#
左合并所有列并使用合并指示符标识修改的行
df2.merge(df1, how='left', indicator=True).query("_merge != 'both'")
A B _merge 1 2 2 left_only 2 4 5 left_only
i86rm4rw2#
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.compare.html#pandas.DataFrame.compare我觉得你在找这样的东西。Self是df1,df2是'other' df1.compare(df2)。
df1.compare(df2)
d = df1.compare(df2, align_axis=0, keep_shape=True, keep_equal=False) print(d) A B 0 self NaN NaN other NaN NaN 1 self NaN 3.0 other NaN 2.0 2 self 3.0 4.0 other 4.0 5.0
gojuced73#
另一种可能的解决方案:
df2[~df1.eq(df2).all(axis=1)]
输出:
A B 1 2 2 2 4 5
3条答案
按热度按时间3b6akqbq1#
左合并所有列并使用合并指示符标识修改的行
i86rm4rw2#
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.compare.html#pandas.DataFrame.compare
我觉得你在找这样的东西。Self是df1,df2是'other'
df1.compare(df2)
。gojuced73#
另一种可能的解决方案:
输出: