【发布时间】:2018-11-05 16:29:30
【问题描述】:
我有两个数据框,A 和 B,我想在 A 中而不是 B 中获取它们,就像左上角正下方的那个一样。
数据框 A 具有列 ['a','b' + others],B 具有列 ['a','b' + others]。没有 NaN 值。我尝试了以下方法:
1.
dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) | (~dfA['b'].isin(dfm['b'])
2.
dfm = dfA.merge(dfB, on=['a','b'])
dfe = dfA[(~dfA['a'].isin(dfm['a']) & (~dfA['b'].isin(dfm['b'])
3.
dfe = dfA[(~dfA['a'].isin(dfB['a']) | (~dfA['b'].isin(dfB['b'])
4.
dfe = dfA[(~dfA['a'].isin(dfB['a']) & (~dfA['b'].isin(dfB['b'])
但是当我得到len(dfm) 和len(dfe) 时,它们的总和不等于dfA(相差几个数字)。我已经尝试在虚拟案例和 #1 作品上执行此操作,所以也许我的数据集可能有一些我无法重现的特性。
这样做的正确方法是什么?
【问题讨论】:
-
问题出在
(~dfA['a'].isin(dfm['a']) | (~dfB['b'].isin(dfm['b']))表达式中。例如,如果在dfm中有(a=1, b=1), (a=2, b=2),在 dfA 中有(a=1, b=2),则此表达式返回False。 -
@user3063243 知道了。我还发布了我所做的其他尝试,但没有一个是正确的。你知道正确的方法吗?
-
好图...
-
@liang 图片不是我的……我是从 Google 图片的某个地方得到的
-
相关:如果你有兴趣学习如何正确合并列或索引,可以参考我最近写的这个规范:Pandas Merging 101。