Python 比较两个数据帧中的两列(字符串格式),而列的长度不相同

Python 比较两个数据帧中的两列(字符串格式),而列的长度不相同,python,pandas,dataframe,compare,Python,Pandas,Dataframe,Compare,以下是两个数据帧: 数据帧A: index codes 1 A 2 B 3 C 4 D 数据帧B index cym 1 A 2 L 3 F 4 B 5 N 6 X A和B的长度不相等。我想比较列“codes”(数据帧A)和列“cym”(数据帧B),并返回这两列之间的差值加上数据帧B的索引列中的数据。输出

以下是两个数据帧: 数据帧A:

index  codes     
1        A      
2        B    
3        C
4        D
数据帧B

index    cym
1         A
2         L
3         F
4         B
5         N
6         X
A和B的长度不相等。我想比较列“codes”(数据帧A)和列“cym”(数据帧B),并返回这两列之间的差值加上数据帧B的索引列中的数据。输出如下:

index    cym
2        L
3        F
5        N
6        X

我尝试使用merge和equals函数来解决它。但是我无法生成输出。

您可以使用
isin

B[~B.cym.isin(A.codes)]

#index  cym
#1   2    L
#2   3    F
#4   5    N
#5   6    X

@Psidom答案的更详细但更快的版本

mask = ~np.in1d(B.cym.values, A.codes.values)
pd.DataFrame(
    B.values[mask],
    B.index[mask],
    B.columns
)

  index cym
1     2   L
2     3   F
4     5   N
5     6   X

定时

%timeit B[~B.cym.isin(A.codes)]
1000 loops, best of 3: 348 µs per loop

%%timeit
mask = ~np.in1d(B.cym.values, A.codes.values)
pd.DataFrame(
    B.values[mask],
    B.index[mask],
    B.columns
)
10000 loops, best of 3: 194 µs per loop

为了完整起见:

In [22]: B.query("cym not in @A.codes")
Out[22]:
   index cym
0      2   L
1      3   F
2      5   N
3      6   X

我检查你的最后一个问题,如果有3个连续的N怎么办?或者样本中只有2个或1个类似的NAN,从来没有3个、4个或更多连续的NAN?谢谢