【问题标题】:Left join on multiple columns多列左连接
【发布时间】:2016-12-17 16:18:24
【问题描述】:

我习惯于在 R 中使用 dplyr,我会做类似的事情

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'

我不知道如何使用 pd.merge 来做同样的事情。 我想通过两列加入,然后将第三列引入 - 如果有意义的话,除了加入表之外,不是加入表中的每一列

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'])

【问题讨论】:

标签: python pandas merge left-join


【解决方案1】:

IIUC 您可以通过添加[] 并省略mtcars2 来使用子集 - 您可以再次使用mtcars

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

示例:

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

【讨论】:

  • 啊这么简单,只是连接表周围的第二组括号!看我会花几个小时试图弄清楚。非常感谢
猜你喜欢
  • 2012-03-21
  • 2017-09-24
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2012-10-21
  • 2021-09-16
相关资源
最近更新 更多