【问题标题】:How to merge Pandas DataFrames with row replication?如何将 Pandas DataFrames 与行复制合并?
【发布时间】:2021-02-22 18:54:50
【问题描述】:

我有两个如下所示的 DataFrame:

    bin     last_4  brand       name    chargeback
0   112233  1234    visa        Joe     0
1   445566  5678    visa        Susy    0
2   778899  9012    mastercard  James   0

    bin     last_4  chargeback
0   112233  1234    1
1   445566  5678    1

我想得到以下结果:

    bin     last_4  brand       name    chargeback
0   112233  1234    visa        Joe     0
1   445566  5678    visa        Susy    0
2   778899  9012    mastercard  James   0
3   112233  1234    visa        Joe     1
4   445566  5678    visa        Susy    1

我已经尝试了几次pd.merge() 方法。然而,当我打电话给pd.merge(df_1, df_2, how='outer', on=['bin', 'last_4']) 时,我只得到了 3 行重复的“chargeback”列,如下所示:

    bin     last_4  brand       name    chargeback_x    chargeback_y
0   112233  1234    visa        Joe     0               1.0
1   445566  5678    visa        Susy    0               1.0
2   778899  9012    mastercard  James   0               NaN

当我调用 pd.merge(df_1, df_2, how='outer', on=['bin', 'last_4', 'chargeback']) 时,我在“品牌”和“名称”列中得到了 NaN 值:

    bin     last_4  brand       name    chargeback
0   112233  1234    visa        Joe     0
1   445566  5678    visa        Susy    0
2   778899  9012    mastercard  James   0
3   112233  1234    NaN         NaN     1
4   445566  5678    NaN         NaN     1

那么您知道如何获取这些包含完整信息的复制行吗?

【问题讨论】:

    标签: python pandas dataframe merge duplicates


    【解决方案1】:

    您可以将pd.concatpd.merge 一起使用:

    pd.concat([df1,df2.merge(df1.drop('chargeback', axis=1),how='left',on=['bin', 'last_4'])])
    Out[1]: 
          bin  last_4       brand   name  chargeback
    0  112233    1234        visa    Joe           0
    1  445566    5678        visa   Susy           0
    2  778899    9012  mastercard  James           0
    0  112233    1234        visa    Joe           1
    1  445566    5678        visa   Susy           1
    

    因为,第二个数据帧有一些缺失的信息, merge 第一个数据帧与第二个数据帧,但不要在“退款”列中合并。然后,concat 这个新合并的数据帧与第一个数据帧。

    【讨论】:

      猜你喜欢
      • 2019-08-06
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2018-01-29
      • 2019-07-12
      相关资源
      最近更新 更多