使用pandas合并数据以获取专有权数据

时间:2017-07-17 08:47:04

标签: python-3.x pandas

我有两套

A = {1,2,3,4,5,6}
                B = {4,5,6,7,8,9}

我想从集合B中获取设置B的数据(即数据不应包含交集数据)

exclBdata = pd.merge(A, B, how='right', left_index =True, right_index = True)

当我使用上述命令时,我正在

  

{4,5,6,7,8,9}

我认为我没有正确地传递论据。请纠正我输出<= p>的正确命令

{7,8,9}

下面我提到数据框示例

right1 = DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'],
           'value': range(6)})
>>> left1 = DataFrame({'group_val': [3.5, 7]}, index=['a', 'b'])
>>> right1
  key  value
0   a      0
1   b      1
2   a      2
3   a      3
4   b      4
5   c      5
>>> right1
  key  value
0   a      0
1   b      1
2   a      2
3   a      3
4   b      4
5   c      5
>>> left1
   group_val
a        3.5
b        7.0

因此,当我合并时,我应该只将“c”5作为“a”并且“b”存在于两者中

谢谢(仅供参考:我使用的是python 3.4.2)

3 个答案:

答案 0 :(得分:2)

你可以尝试使用面具:

import pandas as pd
A = {1,2,3,4,5,6}
B = {4,5,6,7,8,9}
a = pd.DataFrame(list(A), columns=['test'])
b = pd.DataFrame(list(B), columns=['test'])
mask = b['test'].isin(a.test)
b[~mask]

Out[7]: 
   test
3     7
4     8
5     9

来源:Excluding rows from a pandas dataframe based on column value and not index value

答案 1 :(得分:2)

除了isin()方法(@Till's answer中已经很好地解释了),我们可以使用query()方法:

In [223]: right1.query("key not in @left1.index")
Out[223]:
  key  value
5   c      5

来源DF:

In [224]: left1
Out[224]:
   group_val
a        3.5
b        7.0

In [225]: right1
Out[225]:
  key  value
0   a      0
1   b      1
2   a      2
3   a      3
4   b      4
5   c      5

答案 2 :(得分:0)

如果您正在使用set

,则不需要pandas

试试这个:

A = {1,2,3,4,5,6}
B = {4,5,6,7,8,9}

# You want to take the elements in B if they are not in A
C = [element for element in B if element not in A]