【问题标题】:Python Pandas Combining 2 df by keysPython Pandas按键组合2个df
【发布时间】:2017-11-29 21:12:22
【问题描述】:

我正在尝试合并这两个数据框: df1 =

ID1 ID2
111 1001
112 1002
113 1003
114 1004
115 1005

df2 =

ID1  Name   Age
111  ABC    20
111  ABC    21
1001 ABC    22
1002 QAZ    18
1002 QAZ    19
1002 QAZ    20
113  XYZ    25
113  XYZ    25

得到这样的输出:

ID      Name Age ID1    ID2
111     ABC  20  111    1001
111     ABC  21  111    1001
1001    ABC  22  111    1001
1002    QAZ  18  112    1002
1002    QAZ  19  112    1002
1002    QAZ  20  112    1002
113     XYZ  25  113    1003
113     XYZ  25  113    1003

这可能吗?

提前致谢!

【问题讨论】:

    标签: pandas dictionary join


    【解决方案1】:

    merge + combine_first PS:我觉得df2中的ID1应该是ID

    df2.merge(df1,left_on='ID',right_on='ID1',how='left').\
            combine_first(df2.merge(df1,left_on='ID',right_on='ID2',how='left'))
    Out[912]: 
         ID Name  Age    ID1     ID2
    0   111  ABC   20  111.0  1001.0
    1   111  ABC   21  111.0  1001.0
    2  1001  ABC   22  111.0  1001.0
    3  1002  QAZ   18  112.0  1002.0
    4  1002  QAZ   19  112.0  1002.0
    5  1002  QAZ   20  112.0  1002.0
    6   113  XYZ   25  113.0  1003.0
    7   113  XYZ   25  113.0  1003.0
    

    【讨论】:

    • 非常简洁的解决方案!
    • 你是救生员!
    • @TylerNG 快乐编码
    • 如果我添加更多“ID”列,@Wen 会完成这项工作。例如:A = df2.merge(df1,left_on='ID',right_on='ID1',how='left').combine_first(df2.merge(df1,left_on='ID',right_on='ID2',how ='left')) B = A.combine_first(df2.merge(df1,left_on='ID',right_on='ID3',how='left')))
    • @TylerNG 是的,你只需要 combine_frist 多次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多