【问题标题】:Merge two data frames in Python on column with non-unique values [duplicate]在具有非唯一值的列上合并Python中的两个数据框[重复]
【发布时间】:2018-01-13 22:06:13
【问题描述】:

我正在尝试根据列“X”在 Python 中合并两个数据框。

左侧数据框中的 X 列具有非唯一值,右侧数据框中的 X 列具有唯一值。如何将右侧数据框中的值合并到左侧数据框中?

我想将 df2 中的行合并到 df1 以形成 df3

df1 = pd.DataFrame({'A': ['NA','EU','LA','ME'],
                    'B': [50, 23,21,100],
                    'X': ['IW233', 'IW455', 'IW455', 'IW100']})

df2 = pd.DataFrame({'C': [50, 12, 12, 11, 10, 16],
                    'X': ['IW455', 'IW200', 'IW233', 'IW150', 'IW175', 'IW100'],
                    'D': ['Aug', 'Sep', 'Jan', 'Feb', 'Dec', 'Nov']})

df3:1

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    你可以使用merge左连接,如果只有X被连接列on参数可以省略:

    df = pd.merge(df1, df2, how='left')
    print (df)
        A    B      X   C    D
    0  NA   50  IW233  12  Jan
    1  EU   23  IW455  50  Aug
    2  LA   21  IW455  50  Aug
    3  ME  100  IW100  16  Nov
    

    如果有多个相同的列名:

    df = pd.merge(df1, df2, on='X', how='left')
    print (df)
        A    B      X   C    D
    0  NA   50  IW233  12  Jan
    1  EU   23  IW455  50  Aug
    2  LA   21  IW455  50  Aug
    3  ME  100  IW100  16  Nov
    

    【讨论】:

    • 谢谢!我能够合并,但来自正确数据框的所有值现在都变为空。关于为什么会发生这种情况的任何建议?
    • 不同类型可能存在问题,因此需要将列X 转换为相同的dtypes。检查this
    • 我将两种数据类型都更改为字符串,但错误仍然存​​在。所有正确的值仍然是 NaN
    • 可能有一些空格,然后需要df1['X'] = df1['X'].astype(str).str.strip()df2 也一样。
    • 如果我的回答对您有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。跨度>
    【解决方案2】:

    您可以在此处使用join 运算符:

    >>> df1.join(df2.set_index('X'),on='X')
        A    B      X   C    D
    0  NA   50  IW233  12  Jan
    1  EU   23  IW455  50  Aug
    2  LA   21  IW455  50  Aug
    3  ME  100  IW100  16  Nov
    

    所以我们首先将右框架的索引更改为X(因为这些在右框架上是唯一的,这不是问题)。然后我们在X 列上执行连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2020-07-07
      • 2021-02-18
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      相关资源
      最近更新 更多