如果我有两个数据流,其中一个是另一个的子集,我如何完全删除公共行?

By simon at 2019-05-16 • 0人收藏 • 23人看过

我已经在寻找这种类型的问题,但是没有一个真正回答我的问题。

假设我有两个数据场,它们的索引是不一致的。2是... 的子集Df1我想删除所有的行Df1存在于2.

我已经尝试了下面的方法,但是没有得到我想要的结果。

1[ ~ df1.index.isin (df2.index)]

不幸的是,我不能与您共享原始数据,但是,两个数据流中的列数是14。

下面是我正在寻找的一个例子:

Df1个月年度销售012012551420144027201384310201431
2个月年度销售01201255110201431

我在寻找:

20144017201384
4 个回复 | 最后更新于 2019-05-16
2019-05-16   #1

使用左连接合并及指示器参数,然后比较Series.eq(==)和过滤布尔索引:

Df1[ df1.merge (df2,指示符 True,how'left')['merge']。 (只剩下)]印刷(登革热)月份年度销售1420144027201384
2019-05-16   #2

因此,您需要的是通过值而不是通过索引来删除。

使用 concatenate 和 drop:

Concat ([ df1,df2]). 丢下副本(保留假的)

例子:

Df1 pd. ({'month': [1,4,7,10] ,'year': [2012,2014,2013,2014] ,'sale': [55,40,84,31]}) df2 pd. ({'month': [1,10] ,'year': [2012,2014] ,'sale': [55,31]}) pd.concat ([[ df1,df2]). 丢下副本(保留假的)

结果:

1440201427842013
2019-05-16   #3

你可以试试下面的方法吗

[ ~ df1. isin (df2)]
2019-05-16   #4

您可以创建一个多索引,其中包含每个数据框中的所有列。 从这一点开始,你只需要从第一个中去掉第二个的索引:

设置索引(list (df1.columns))。 Drop (df2.set index (list (df2.columns)). 索引)。 重置索引()

结果与您的示例数据:

月销售0420144017201384

登录后方可回帖

Loading...