代码之家  ›  专栏  ›  技术社区  ›  daiyue

如何使用熊猫中另一个数据帧的值更新一个数据帧

  •  1
  • daiyue  · 技术社区  · 6 年前

    我有两个 df S df1 就像,

    primary_key    code    amount
    220492763      763     32.41
    213274768      764     23.41
    226835769      766     88.41
    224874836      7766    100.31
    219074759      74836   111.33
    

    df2 就像,

    primary_key    code    amount
    213274768      764     24.41
    224874836      7766    101.31
    217774816      768     123.43
    222176762      798     111.44
    219374759      24774   134.56
    

    我喜欢使用 DF2 更新 df_1 基于相同的 primary_key ,对于中的其余行 DF2 ,将它们附加到 DF1 ,结果是,

    primary_key    code    amount
    220492763      763     32.41
    213274768      764     24.41
    226835769      766     88.41
    224874836      7766    101.31
    219074759      74836   111.33
    217774816      768     123.43
    222176762      798     111.44
    219374759      24774   134.56
    

    尝试过使用

    df1.set_index('primary_key').combine_first(df2.set_index('primary_key')).reset_index()  
    

    但是这两个 东风 是混合在一起的,我想知道如何修复它。

    2 回复  |  直到 6 年前
        1
  •  2
  •   BENY    6 年前

    使用 combine_first

    yourdf=df2.set_index('primary_key').combine_first(df1.set_index('primary_key')).reset_index()
    yourdf
    Out[287]: 
       primary_key     code  amount
    0    213274768    764.0   24.41
    1    217774816    768.0  123.43
    2    219074759  74836.0  111.33
    3    219374759  24774.0  134.56
    4    220492763    763.0   32.41
    5    222176762    798.0  111.44
    6    224874836   7766.0  101.31
    7    226835769    766.0   88.41
    

    更新添加订单

    idx=pd.concat([df1.primary_key,df2.primary_key]).drop_duplicates()
    yourdf=df2.set_index('primary_key').combine_first(df1.set_index('primary_key')).reindex(idx).reset_index()
    yourdf
    Out[293]: 
       primary_key     code  amount
    0    220492763    763.0   32.41
    1    213274768    764.0   24.41
    2    226835769    766.0   88.41
    3    224874836   7766.0  101.31
    4    219074759  74836.0  111.33
    5    217774816    768.0  123.43
    6    222176762    798.0  111.44
    7    219374759  24774.0  134.56
    
        2
  •  2
  •   Scott Boston    6 年前

    使用 pd.concat , drop_duplicates reindex :

    idx=pd.concat([df1.primary_key,df2.primary_key]).drop_duplicates()
    pd.concat([df2,df1]).drop_duplicates('primary_key').set_index('primary_key').reindex(idx).reset_index()
    

    输出:

       primary_key   code  amount
    0    220492763    763   32.41
    1    213274768    764   24.41
    2    226835769    766   88.41
    3    224874836   7766  101.31
    4    219074759  74836  111.33
    5    217774816    768  123.43
    6    222176762    798  111.44
    7    219374759  24774  134.56