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
的DataFramefirst = pd.merge(left, right, on='key')
#first df
A B key
0 1 1 K0
1 2 2 K1
然后我想创建一个只包含K2,K3的DataFrame
#Expectation df
A B key
0 3 3 K2
0 4 4 K3
我意识到这应该通过左(右)外部方法完成,但我对此方法感到困惑。
答案 0 :(得分:4)
使用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
答案 1 :(得分:0)
我更喜欢这种合并和搜索的方式是: 首先,你在键上设置索引(开头是非常相似的概念,对吧?):
left.set_index('key',inplace=True)
right.set_index('key',inplace=True)
然后当您在pandas中合并或连接两个DataFrame时,您希望使用pd.concat http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html,这是方法pandas用于所有合并和连接操作(pandas join和merge方法也在此下使用罩。)
In[10]: pd.concat([left,right], axis=1)
Out[10]:
A B
K0 1 1
K1 2 2
K2 3 3
K3 4 4
现在,您可以轻松选择所需的密钥:
In[17]: df = pd.concat([left,right], axis=1)
In[18]: df.loc[['K0','K1'],:]
Out[18]:
A B
K0 1 1
K1 2 2