2016-08-11 8 views
3

Ich bin verwendet, mit R zu verwenden dplyr wo ich so etwas wieLEFT JOIN auf mehreren Spalten

library(dplyr) 
mtcars2=mtcars 
mtcars3 = mtcars %>% left_join(mtcars2[,c("mpg","vs","hp")], by =c("mpg",'hp')) 

# what this does is I do a left join with multiple columns and then bring over only *1* additional column. This means that mtcars3 only has one additional field - a duplicated 'vs' 

tun würde, ich kann nicht herausfinden, wie pd.merge zu verwenden, um das gleiche zu tun. Ich würde von zwei Säulen anschließen möchten, und dann über bringen nur die 3. Säule - nicht jede Spalte in der verknüpften Tabelle mit Ausnahme der Join-bys wenn das Sinn macht

import pandas as pd 
mtcars = pd.read_csv('mtcars.csv') 
mtcars2=mtcars 

mtcars3 = pd.merge(mtcars, mtcars2['vs','hp','mpg'],how='left', on = ['mpg','hp']) 
+0

http://pandas.pydata.org/pandas-docs/stable/merging.html – Merlin

+0

zwei Links, die Sie über Merge informieren. http://chrisalbon.com/python/pandas_join_merge_dataframe.html – Merlin

Antwort

3

IIUC Sie Teilmenge verwenden können mtcars2 Zugabe [] und weglassen - Sie können mtcars wieder verwenden:

import pandas as pd 
mtcars = pd.read_csv('mtcars.csv') 
mtcars3 = pd.merge(mtcars, mtcars[['vs','hp','mpg']], how='left', on = ['mpg','hp']) 

Probe:

import pandas as pd 

mtcars = pd.DataFrame({'vs':[1,2,3], 
         'hp':[1,1,1], 
         'mpg':[7,7,9], 
         'aaa':[1,3,5]}) 

print (mtcars) 
    aaa hp mpg vs 
0 1 1 7 1 
1 3 1 7 2 
2 5 1 9 3 

mtcars3 = pd.merge(mtcars, mtcars[['vs','hp','mpg']], how='left', on = ['mpg','hp']) 
print (mtcars3) 
    aaa hp mpg vs_x vs_y 
0 1 1 7  1  1 
1 1 1 7  1  2 
2 3 1 7  2  1 
3 3 1 7  2  2 
4 5 1 9  3  3 
+0

ah so einfach, nur ein 2. Satz von Klammern um den Beitritt Tisch! Ich würde stundenlang versuchen, das herauszufinden. Ich danke dir sehr – scbears88