猿问

比较两个数据框并获得差异

我有两个数据框。例子:


df1:

Date       Fruit  Num  Color 

2013-11-24 Banana 22.1 Yellow

2013-11-24 Orange  8.6 Orange

2013-11-24 Apple   7.6 Green

2013-11-24 Celery 10.2 Green


df2:

Date       Fruit  Num  Color 

2013-11-24 Banana 22.1 Yellow

2013-11-24 Orange  8.6 Orange

2013-11-24 Apple   7.6 Green

2013-11-24 Celery 10.2 Green

2013-11-25 Apple  22.1 Red

2013-11-25 Orange  8.6 Orange

每个数据框都有“日期”作为索引。两个数据帧具有相同的结构。


我想要做的是比较这两个数据帧,并找到df2中哪些行不在df1中。我想比较日期(索引)和第一列(香蕉,APple等),以查看它们是否存在于df2与df1中。


我尝试了以下方法:


并排输出两个熊猫数据帧中的差异-突出显示差异

比较两个熊猫数据框的差异

对于第一种方法,我收到此错误:“异常:只能比较标记相同的DataFrame对象”。我尝试删除日期作为索引,但得到相同的错误。


在第三种方法上,我得到断言返回False,但是无法弄清楚如何实际看到不同的行。


任何指针都将受到欢迎


四季花海
浏览 525回答 3
3回答

凤凰求蛊

这种方法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   Color9  2013-11-25  Orange   8.6  Orange8  2013-11-25   Apple  22.1     Red

HUX布斯

在alko的答案几乎对我有用的基础上,除了过滤步骤(我得到了:)ValueError: cannot reindex from a duplicate axis,这是我使用的最终解决方案:# join the dataframesunited_data = pd.concat([data1, data2, data3, ...])# group the data by the whole row to find duplicatesunited_data_grouped = united_data.groupby(list(united_data.columns))# detect the row indices of unique rowsuniq_data_idx = [x[0] for x in united_data_grouped.indices.values() if len(x) == 1]# extract those unique valuesuniq_data = united_data.iloc[uniq_data_idx]
随时随地看视频慕课网APP

相关分类

Python
我要回答