【问题标题】:Pandas - merge two DataFrames with Identical Column NamesPandas - 合并两个具有相同列名的 DataFrame
【发布时间】:2014-09-28 11:58:45
【问题描述】:

我在第一列中有两个具有相同列名和相同 ID 的数据框。除了 ID 列之外,在一个 DataFrame 中包含值的每个单元格在另一个 DataFrame 中都包含 NaN。 以下是它们的外观示例:

ID    Cat1    Cat2    Cat3
1     NaN     75      NaN
2     61      NaN     84
3     NaN     NaN     NaN


ID    Cat1    Cat2    Cat3
1     54      NaN     44
2     NaN     38     NaN
3     49      50      53

我想将它们合并到一个 DataFrame 中,同时保持相同的列名。所以结果应该是这样的:

ID    Cat1    Cat2    Cat3
1     54      75      44
2     61      38      84
3     49      50      53

我试过了:

df3 = pd.merge(df1, df2, on='ID', how='outer')

这给了我一个包含两倍多列的 DataFrame。如何将每个 DataFrame 中的值合并为一个?

【问题讨论】:

    标签: python pandas merge dataframe


    【解决方案1】:

    在这种情况下,combine_first 函数是合适的。 (http://pandas.pydata.org/pandas-docs/version/0.13.1/merging.html)

    顾名思义,combine_first 获取第一个 DataFrame,并在第一个 DataFrame 中找到 NaN 值的地方添加第二个的值。

    所以:

    df3 = df1.combine_first(df2)
    

    生成一个新的 DataFrame,df3,它本质上只是 df1,并尽可能填充来自 df2 的值。

    【讨论】:

      【解决方案2】:

      您可能需要 df.update。请参阅documentation

      df1.update(df2, raise_conflict=True)
      

      【讨论】:

        【解决方案3】:

        您也可以将 df1 中的 NaN 值更改为 df2 中的非 NaN 值。

        df1[pd.isnull(df1)] = df2[~pd.isnull(df2)]
        

        【讨论】:

          猜你喜欢
          • 2014-01-18
          • 1970-01-01
          • 2017-09-02
          • 2020-06-13
          • 2020-01-02
          • 2021-02-24
          • 2022-10-18
          • 2021-11-02
          • 2014-07-22
          相关资源
          最近更新 更多