【问题标题】:How to merge two dataframe with some row values equal?如何合并具有某些行值相等的两个数据框?
【发布时间】:2021-09-06 00:58:00
【问题描述】:

我有两个要合并为一个的数据框。第一个具有 ID 作为其列,而第二个具有相同的值但在名为 id_number 的列中。我尝试了下面的代码,但最后 final_df 同时具有 ID 和 id_number 列及其值。合并后如何只保留一列的id?

final_df = df.merge(
    df2,
    left_on='ID',
    right_on='id_number',
    how='inner')

另外,假设 df 列 A 的以下数据帧格式:

A
0
1
2

第二个数据框中的同一列 A 有一些空字段,如下所示:

A
-
1
2

合并后,最终的dataframe如何复合两个dataframe,使得A不会有空值?

【问题讨论】:

  • 合并后试试final_df.drop(['id_number'], inplace=True)

标签: python pandas dataframe inner-join


【解决方案1】:

合并后尝试选择所需的列

final_df = df.merge(
    df2,
    left_on='ID',
    right_on='id_number',
    how='inner')[['ID', 'col1', 'col2']]

或合并后删除列

final_df = df.merge(
    df2,
    left_on='ID',
    right_on='id_number',
    how='inner').drop(['id_number'], axis=1)

【讨论】:

    【解决方案2】:

    您正在寻找的解决方案:

    df.combine_first(df2.rename(columns={'id_number': 'ID'}))
    

    一个完整的工作示例:

    import pandas as pd
    
    dfa = pd.DataFrame({'ID': [1, 2, 3], 'other': ['A', 'B', 'C']})
    dfb = pd.DataFrame({'id_number': [None, 2, 3], 'other_2': ['A2', 'B2', 'C2']})
    
    dfa.combine_first(dfb.rename(columns={'id_number': 'ID'}))
    

    【讨论】:

      【解决方案3】:

      df2的'on-the-fly'id_number列重命名为ID

      final_df = df.merge(
          df2.rename(columns={'id_number': 'ID'}),
          on='ID',
          how='inner')
      

      【讨论】:

        猜你喜欢
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2021-12-14
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多