我尝试比较两个数据帧,然后从两者中删除匹配项。
我认为tempSheet = tempSheet[tempSheet != testdf]
可行,但我收到错误
ValueError: Can only compared identically-labeled DataFrame objects
列名是相同的,所以我猜测它不可能那样做。
我有明显的语法错误吗?有没有办法使用pd.merge
来返回不匹配的?
我的数据框看起来像这样:
Qty Price
0 1 1.30
1 6 2.70
2 8 0.20
3 10 3.90
4 9 11.25
5 15 1.89
6 26 2.67
7 200 7.65
...
Qty Price
0 1 1.30
1 10 3.90
2 15 1.89
3 16 0.98
4 2 10.52
5 66 9.87
6 9 13.42
7 43 27.65
...
我想将第一个减少到仅匹配,所以
Qty Price
0 6 2.70
1 8 0.20
2 9 11.25
3 26 2.67
...
然后我会对第二个做同样的事情。
答案 0 :(得分:2)
这将为您提供匹配的索引:
>>> hit = df1.reset_index().merge(df2.reset_index(),
... on=['Qty', 'Price'], how='inner', suffixes=('-1', '-2'))
>>> hit
index-1 Qty Price index-2
0 0 1 1.30 0
1 3 10 3.90 1
2 5 15 1.89 2
[3 rows x 4 columns]
如果您要删除匹配项,只需从index-1
和df1
index-2
删除df2
。
>>> df1[~df1.index.isin(hit['index-1'])] # or, df1.loc[df1.index - hit['index-1']]
Qty Price
1 6 2.70
2 8 0.20
4 9 11.25
6 26 2.67
7 200 7.65
[5 rows x 2 columns]
>>> df2[~df2.index.isin(hit['index-2'])] # or, df2.loc[df2.index - hit['index-2']]
Qty Price
3 16 0.98
4 2 10.52
5 66 9.87
6 9 13.42
7 43 27.65
[5 rows x 2 columns]