【问题标题】:merge multiple data frames by multiple columns, Pandas, Python通过多列合并多个数据框,Pandas,Python
【发布时间】:2020-11-02 21:37:20
【问题描述】:

我想以 df3 - df2 - df1 的顺序合并多个数据帧。 df3df2 首先由 df3(id, Feature 1)df2(id, Feature 1) 上合并。但是,df2(id, Feature 2)df1(id, Feature 2) 合并在一起。输出如下所示:

这是我的代码:

import pandas as pd

data1 = {
    'id': ['1', '2', '3', '4', '5'],
    'Feature1': ['K', 'C', 'E', 'G', 'I'],
    'Feature2': ['L', 'N', 'F', 'H', 'J']}

df1 = pd.DataFrame(data1, columns = ['id', 'Feature1', 'Feature2'])

data2 = {
    'id': ['1', '2', '6', '7', '8'],
    'Feature1': ['K', 'M', 'O', 'Q', 'S'],
    'Feature2': ['L', 'N', 'P', 'R', 'T']}
df2 = pd.DataFrame(data2, columns = ['id', 'Feature1', 'Feature2'])

data3 = {
    'id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
    'Feature1': ['K', 'M', 'O', 'Q', 'S','X','Y','Z','W','P'],
    'Feature2': ['B', 'D', 'F', 'H', 'J','O', 'Q', 'S','X','Y'],
    'Feature3': [12, 13, 14, 'K', 'M','S', 'Q',15, 16, 17,]}


df3 = pd.DataFrame(data3, columns = ['id', 'Feature1', 'Feature2','Feature3'])

df1df2df3如上图所示。

我能问一下怎么做吗?谢谢!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    像这样:

    In [114]: df3.merge(df2, on=['id','Feature1'], how='left').merge(df1, left_on=['id','Feature2_y'], right_on=['id','Feature2'], how='left') 
    Out[114]: 
       id Feature1_x Feature2_x Feature3 Feature2_y Feature1_y Feature2
    0   1          K          B       12          L          K        L
    1   2          M          D       13          N          C        N
    2   3          O          F       14        NaN        NaN      NaN
    3   4          Q          H        K        NaN        NaN      NaN
    4   5          S          J        M        NaN        NaN      NaN
    5   7          X          O        S        NaN        NaN      NaN
    6   8          Y          Q        Q        NaN        NaN      NaN
    7   9          Z          S       15        NaN        NaN      NaN
    8  10          W          X       16        NaN        NaN      NaN
    9  11          P          Y       17        NaN        NaN      NaN
    

    【讨论】:

    • @Herry 请不要忘记通过点击我答案左侧的tick-mark 来支持并标记它已接受。
    猜你喜欢
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多