Python 如何合并这两个数据帧
首先,我想创建一个只包含K0,K1的数据帧Python 如何合并这两个数据帧,python,mysql,pandas,Python,Mysql,Pandas,首先,我想创建一个只包含K0,K1的数据帧 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
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
然后我想创建一个只包含K2,K3的数据帧
first = pd.merge(left, right, on='key')
#first df
A B key
0 1 1 K0
1 2 2 K1
我意识到这应该通过左(右)外方法完成,但我对这种方法感到困惑。使用
isin
构建布尔掩码:
#Expectation df
A B key
0 3 3 K2
0 4 4 K3
然后使用.loc[mask]
根据掩码选择行:
mask = left['key'].isin(right['key'])
屈服
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]
我更喜欢这种合并和搜索的方式是: 首先,在键上设置索引(这在开始时是非常相似的概念,对吗?) 然后,当您合并或连接pandas中的两个数据帧时,您希望使用pd.concat,这是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
left.set_index('key',inplace=True)
right.set_index('key',inplace=True)
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