import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': [1, 2, 3, 4],
'B': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['K0', 'K1'],})
#left df #right df
A B key key
0 1 1 K0 0 K0
1 2 2 K1 1 K1
3 3 3 K2
4 4 4 K3
首先我想创建一个只包含K0,K1的数据帧
first = pd.merge(left, right, on='key')
#first df
A B key
0 1 1 K0
1 2 2 K1
然后我想创建一个只包含K2,K3的数据帧
#Expectation df
A B key
0 3 3 K2
0 4 4 K3
我意识到这应该通过左(右)外部方法来完成,但我对这种方法感到困惑。
最佳答案
使用isin
构建布尔掩码:
mask = left['key'].isin(right['key'])
然后使用
.loc[mask]
根据掩码选择行:import pandas as pd
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': [1, 2, 3, 4],
'B': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['K0', 'K1'],})
mask = left['key'].isin(right['key'])
first, second = left.loc[mask], left.loc[~mask]
产量
In [88]: first
Out[88]:
A B key
0 1 1 K0
1 2 2 K1
In [89]: second
Out[89]:
A B key
2 3 3 K2
3 4 4 K3
关于python - 如何合并这两个DataFrame,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42532003/