Python 比较两个数据帧中的两列(字符串格式),而列的长度不相同
以下是两个数据帧: 数据帧A: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的索引列中的数据。输出
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?谢谢