2016-07-23 193 views
3

我有兩個數據幀DF-1,DF-2這樣的,比較常見的行大熊貓dataframes兩個dataframes

import pandas as pd 

raw_data = {'company': ['comp1', 'comp1', 'comp1', 'comp1', 'comp2', 'comp2', 'comp2', 'comp2', 'comp3', 'comp3', 'comp3', 'comp3'], 
     'region': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'], 
     'name': ['John', 'Jake', 'Alice', 'Mathew', 'Mark', 'Jacon', 'Ryan', 'Sone', 'Steve', 'Rooke', 'Rani', 'Alice'], 
     'preTestScore': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3], 
     'postTestScore': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]} 
df1 = pd.DataFrame(raw_data, columns = ['company', 'region', 'name', 'preTestScore']) 
print df1 


raw_data = {'company': [ 'comp1', 'comp1', 'comp2', 'comp2', 'comp2', 'comp2', 'comp3', 'comp3', 'comp3'], 
     'region': [ '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd'], 
     'name': [ 'Alice', 'Mathew', 'Mark', 'Jacon', 'Ryan', 'Sone', 'Steve', 'Rooke', 'Rani', ], 
     'status': [ 'great', 'average', 'average', 'average', 'good', 'great', 'average', 'average', 'average']} 
df2 = pd.DataFrame(raw_data, columns = ['company', 'region', 'name', 'status']) 
print df2 

如何找到企業,區域和名稱的DF-1中各行與df-2相同。換句話說,如何找到所有三列組合的內連接。

+0

你使用哪種列,以決定它們是否相同?公司,地區和名稱?試試'df1.merge(df2)'。這不是你問的,但我覺得這是你想要的最終結果。 – ayhan

回答

2

這取決於你的

行的DF-1是一樣的DF-2是什麼意思。

因爲列不相同。

如果你的意思是對列的交叉相同值的行,您可以執行inner join user merge

In [13]: pd.merge(df1, df2, how='inner') 
Out[13]: 
    company region name preTestScore status 
0 comp1 2nd Alice   31 great 
1 comp1 2nd Mathew    2 average 
2 comp2 1st Mark    3 average 
3 comp2 1st Jacon    4 average 
4 comp2 2nd Ryan   24  good 
5 comp2 2nd Sone   31 great 
6 comp3 1st Steve    2 average 
7 comp3 1st Rooke    3 average 
8 comp3 2nd Rani    2 average 

編輯

如果您想爲連接列更大的控制權,您可以使用merge函數的onleft_onright_on參數。如果你不這樣做,熊貓會認爲你的意思是兩個數據幀的交集。

0

結果= pd.merge(DF1,DF2,對= [ '公司', '區域', '區域'],如何= 「左」)