3 回答
TA贡献1825条经验 获得超4个赞
这种方法df1 != df2仅适用于具有相同行和列的数据帧。实际上,所有数据帧轴都与_indexed_same方法进行了比较,如果发现差异(即使是按列/索引的顺序),也会引发异常。
如果我说对了,那么您不希望找到变化,而是希望找到对称的差异。为此,一种方法可能是连接数据帧:
>>> df = pd.concat([df1, df2])
>>> df = df.reset_index(drop=True)
通过...分组
>>> df_gpby = df.groupby(list(df.columns))
获取唯一记录的索引
>>> idx = [x[0] for x in df_gpby.groups.values() if len(x) == 1]
过滤
>>> df.reindex(idx)
Date Fruit Num Color
9 2013-11-25 Orange 8.6 Orange
8 2013-11-25 Apple 22.1 Red
TA贡献1876条经验 获得超6个赞
在alko的答案几乎对我有用的基础上,除了过滤步骤(我得到了:)ValueError: cannot reindex from a duplicate axis,这是我使用的最终解决方案:
# join the dataframes
united_data = pd.concat([data1, data2, data3, ...])
# group the data by the whole row to find duplicates
united_data_grouped = united_data.groupby(list(united_data.columns))
# detect the row indices of unique rows
uniq_data_idx = [x[0] for x in united_data_grouped.indices.values() if len(x) == 1]
# extract those unique values
uniq_data = united_data.iloc[uniq_data_idx]
添加回答
举报