首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个数据帧的w.r.t列中删除元素

从另一个数据帧的w.r.t列中删除元素
EN

Stack Overflow用户
提问于 2017-07-08 13:17:08
回答 2查看 46关注 0票数 1

我有一个数据框架,比如具有多级索引的df1

代码语言:javascript
复制
       A     B     C      D
 0  0    0     1     2      3
         4     5     6      7
 1  2    8     9     10     11
    3    2     3     4      5

我还有另一个数据框架,在df2中有两个公共列,也有多级索引。

代码语言:javascript
复制
          X     B     C      Y
 0   0    0     0     7      3
     1    4     5     6      7
 1   2    8     2     3     11
     3    2     3     4      5

我需要从df1中删除列BC的值与df2中的值相同的行,因此我应该得到如下内容:

代码语言:javascript
复制
       A     B     C      D
  0  0    0     1     2      3
  0  2    8     9     10     11

我试图通过获取公共元素的索引,然后通过列表删除它们,但是它们都是混乱的,并且是多层次的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-08 13:43:42

您可以使用pandas.dataframe.ilocnumpy.where在一个班轮中这样做:(我认为这是最简单的方法)。

代码语言:javascript
复制
df1 = df1.iloc[np.where(np.logical_or(df1['B']!=df2['B'],df1['C']!=df2['C']))]

当然,别忘了:

代码语言:javascript
复制
import numpy as np

产出:

代码语言:javascript
复制
     A  B   C   D
0 0  0  1   2   3
1 2  8  9  10  11

希望这能帮上忙。如果有任何问题或意见,请随时评论。

票数 1
EN

Stack Overflow用户

发布于 2017-07-08 13:32:57

可以将MultiIndexes从BC列中提取出来,然后调用索引的isin方法:

代码语言:javascript
复制
idx1 = pd.MultiIndex.from_arrays([df1['B'],df1['C']])
idx2 = pd.MultiIndex.from_arrays([df2['B'],df2['C']])
mask = idx1.isin(idx2)
result = df1.loc[~mask]

例如,

代码语言:javascript
复制
import pandas as pd
df1 = pd.DataFrame({'A': [0, 4, 8, 2], 'B': [1, 5, 9, 3], 'C': [2, 6, 10, 4], 'D': [3, 7, 11, 5], 'P': [0, 0, 1, 1], 'Q': [0, 0, 2, 3]})
df1 = df1.set_index(list('PQ'))
df1.index.names = [None,None]


df2 = pd.DataFrame({'B': [0, 5, 2, 3], 'C': [7, 6, 3, 4], 'P': [0, 0, 1, 1], 'Q': [0, 1, 2, 3], 'X': [0, 4, 8, 2], 'Y': [3, 7, 11, 5]})
df2 = df2.set_index(list('PQ'))
df2.index.names = [None,None]

idx1 = pd.MultiIndex.from_arrays([df1['B'],df1['C']])
idx2 = pd.MultiIndex.from_arrays([df2['B'],df2['C']])
mask = idx1.isin(idx2)
result = df1.loc[~mask]
print(result)

收益率

代码语言:javascript
复制
     A  B   C   D
0 0  0  1   2   3
1 2  8  9  10  11
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44986651

复制
相关文章

相似问题

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