匹配两个数据帧'列并将其存储在新列中

时间:2017-12-05 19:39:31

标签: r python-3.x pandas dataframe dplyr

我有两个数据框:

NULL

df:

id         id.1      weight
RoLu1976   Gr1969     50
MaRg1988   FuDa1989   10
FiKy1977   RoBa1983   12
MaTe1980   SeNd1998   23
Gr69       MaGe1977   72

我需要在df1: id id.1 Gr1969 RoLu1976 FiKy1977 RoBa1983 中制作一个weight列,方法是将df1df1$iddf1$id.1df$id相匹配。

df$id.1

有时,列中的观察值交换,例如,df1: id id.1 weight Gr1969 RoLu1976 50 FiKy1977 RoBa1983 12 第一行和df's第一行:

df1's

df:
id        id.1     weight
Rolu1976  Gr1969   50

这意味着列顺序对匹配并不重要。

[编辑]

我尝试使用df1: id id.1 Gr1969 RoLu1976 包中的inner_join函数和dplyr函数来执行此操作,但是,必须进行列的所有组合。 有没有指定所有组合的方法来匹配它们?

或者用 python pandas模块以最快的方式做到这一点?

1 个答案:

答案 0 :(得分:3)

不确定,列中的交换是有意还是错误。这是解决方案

解决方案

rbind(merge(df1, df2, by.x = c('id.1','id'), by.y = c('id','id.1')),
merge(df1, df2, by.x = c('id.1','id'), by.y = c('id.1','id')))

输出

      id.1       id weight
1   Gr1969 RoLu1976     50
2 RoBa1983 FiKy1977     12

数据

 df1 <- read.table(text='id         id.1      weight
    RoLu1976   Gr1969     50
    MaRg1988   FuDa1989   10
    FiKy1977   RoBa1983   12
    MaTe1980   SeNd1998   23
    Gr69       MaGe1977   72', header=TRUE)


    df2 <- read.table(text='id         id.1
    Gr1969     RoLu1976
    FiKy1977   RoBa1983', header=TRUE)