【问题标题】:Merge two dataframes based on rows根据行合并两个数据框
【发布时间】:2022-01-20 12:31:01
【问题描述】:

我知道合并两个 Pandas df 有很多资源,但我试图根据第二个 df 的 ID 合并一个 df,但我需要从第二个 df 的行中创建新列。这有点令人困惑,但我在这里有一个例子可以说明我想要做什么。

我有什么:

dfa = pd.DataFrame({"ID": ["1", "2", "3"],"Color":["Red", "White", "Blue"],"Length":["16", "14.97", "22.75"]})

dfb = pd.DataFrame({"ID": ["1", "1", "2","3"],"Col1":["Color", "Width", "Length","Color"],"Value":["Blue", "14.97", "22.75","Green"]})

我想要什么:

dfc = pd.DataFrame({"ID": ["1", "2", "3"],"Color":["Blue", "White", "Green"],"Length":["16", "14.97", "22.75"],"c:Color":["Blue","NaN","Green"],"c:Width":["14.97","NaN","NaN"],"c:Length":["NaN","22.75","NaN"]})

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    merge之前使用pivot

    >>> dfa.merge(dfb.pivot('ID', 'Col1', 'Value').add_prefix('c:'), on='ID')
    
      ID  Color Length c:Color c:Length c:Width
    0  1    Red     16    Blue      NaN   14.97
    1  2  White  14.97     NaN    22.75     NaN
    2  3   Blue  22.75   Green      NaN     NaN
    

    要获得“准确”的输出:

    >>> dfa.merge(dfb.pivot('ID', 'Col1', 'Value')[dfb['Col1'].unique()].add_prefix('c:'), on='ID')
      ID  Color Length c:Color c:Width c:Length
    0  1    Red     16    Blue   14.97      NaN
    1  2  White  14.97     NaN     NaN    22.75
    2  3   Blue  22.75   Green     NaN      NaN
    

    【讨论】:

      【解决方案2】:

      加入前需要转换成宽:

      dfa.merge(
          dfb.pivot(
              index='ID', 
              columns='Col1', 
              values='Value'
              ).add_prefix('c:'),
          on = 'ID'
          )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-28
        • 2016-01-06
        • 2020-12-21
        • 2021-09-10
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多