2017-07-19 60 views
1

enter image description here如何使用ISIN多個列

enter image description here

enter image description here

我想找到的col1col2其中col1和第一數據幀的col2值大熊貓都在第二數據幀。

這些行應該在結果數據幀:

  1. 比薩餅,男孩

  2. 比薩餅,女孩

  3. 冰淇淋,男孩

,因爲所有這三個行位於第一個和第二個數據框中。

我該如何做到這一點?我正在考慮使用isin,但是當我必須考慮多個列時,我不確定如何使用它。

回答

3

col1col2執行inner merge

import pandas as pd 
df1 = pd.DataFrame({'col1': ['pizza', 'hamburger', 'hamburger', 'pizza', 'ice cream'], 'col2': ['boy', 'boy', 'girl', 'girl', 'boy']}, index=range(1,6)) 
df2 = pd.DataFrame({'col1': ['pizza', 'pizza', 'chicken', 'cake', 'cake', 'chicken', 'ice cream'], 'col2': ['boy', 'girl', 'girl', 'boy', 'girl', 'boy', 'boy']}, index=range(10,17)) 

print(pd.merge(df2.reset_index(), df1, how='inner').set_index('index')) 

產生

  col1 col2 
index     
10   pizza boy 
11   pizza girl 
16  ice cream boy 

reset_index和​​電話的目的是保護df2的指數作爲您發佈的期望的結果。如果指數不重要,那麼

pd.merge(df2, df1, how='inner') 
#   col1 col2 
# 0  pizza boy 
# 1  pizza girl 
# 2 ice cream boy 

就足夠了。


或者,你可以構建MultiIndexscol1col2列,然後調用MultiIndex.isin method

index1 = pd.MultiIndex.from_arrays([df1[col] for col in ['col1', 'col2']]) 
index2 = pd.MultiIndex.from_arrays([df2[col] for col in ['col1', 'col2']]) 
print(df2.loc[index2.isin(index1)]) 

產生

  col1 col2 
10  pizza boy 
11  pizza girl 
16 ice cream boy