首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除Pandas中两个数据格式中的公共行?

如何删除Pandas中两个数据格式中的公共行?
EN

Stack Overflow用户
提问于 2016-07-31 06:21:47
回答 4查看 33.1K关注 0票数 19

我有两个数据格式-- df1df2

代码语言:javascript
运行
复制
df1 has row1,row2,row3,row4,row5
df2 has row2,row5

我想要一个新的数据格式,比如df1-df2。也就是说,结果数据have应该有行为- row1,row3,row4

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-31 07:24:04

您可以使用pandas.concat将这两个数据帧按行连接,然后使用drop_duplicates删除它们中的所有重复行。

代码语言:javascript
运行
复制
In [1]: import pandas as pd
df_1 = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
df_2 = pd.DataFrame({"A":["foo", "bar", "foo", "bar"], "B":[1,0,1,0], "C":["A","B","A","B"]})

In [2]: df = pd.concat([df_1, df_2])

In [3]: df
Out[3]: 
     A  B  C
0  foo  0  A
1  foo  1  A
2  foo  1  B
3  bar  1  A
0  foo  1  A
1  bar  0  B
2  foo  1  A
3  bar  0  B

In [4]: df.drop_duplicates(keep=False)
Out[4]: 
     A  B  C
0  foo  0  A
2  foo  1  B
3  bar  1  A
票数 19
EN

Stack Overflow用户

发布于 2016-07-31 06:47:53

您可以使用index.difference()函数

代码语言:javascript
运行
复制
import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.random.randn(5, 2), index= ['row' + str(i) for i in range(1, 6)])
df1

        0             1
row1    0.249451    -0.107651
row2    1.295390    -1.773707
row3    -0.893647   -0.683306
row4    -1.090551   0.016833
row5    0.864612    0.369138

df2 = pd.DataFrame(np.random.randn(2, 2), index= ['row' + str(i) for i in [2, 5]])
df2

        0           1
row2    0.549396    -0.675574
row5    1.348785    0.942216

df1.loc[df1.index.difference(df2.index), ]

        0           1
row1    0.249451    -0.107651
row3    -0.893647   -0.683306
row4    -1.090551   0.016833
票数 10
EN

Stack Overflow用户

发布于 2020-08-18 23:17:32

这是最好的方法:

代码语言:javascript
运行
复制
df = df1.drop_duplicates().merge(df2.drop_duplicates(), on=df2.columns.to_list(), 
                   how='left', indicator=True)
df.loc[df._merge=='left_only',df.columns!='_merge']

注意,drop复制用于最小化比较。没有他们,它也会起作用。

为什么这是最好的方法?

最好的方法是比较行内容本身,而不是索引或一/两列,同样的代码也可以用于其他过滤器,如“两者”和“right_only”,以获得类似的结果。

  1. index.difference只适用于基于唯一索引的比较。
  2. pandas.concat()drop_duplicated()不太理想,因为它也将消除那些可能只存在于您想要保留的数据文件中的行,并且由于有效的原因而被复制。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38681340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档