【问题标题】:How to replace the pandas column value based on others dataframe columns如何根据其他数据框列替换熊猫列值
【发布时间】:2020-10-21 22:53:56
【问题描述】:

我有 2 个熊猫数据框,如下所示

df1:-

 col1   col2 col3 
   aa      b   c
   aa      d   c
   bb      d   t
   bb      b   g
   cc      e   c
   dd      g   c

和第二个数据框:-

 col1  col2 
  aa    b
  cc    e
  bb    d

我想将 dataframe1 的 col3 的值更改为“cc”。如下所示。基于第二个数据框列 col1 和 col2。

 col1   col2 col3 
   aa      b   cc
   aa      d   c
   bb      d   cc
   bb      b   g
   cc      e   cc
   dd      g   c

简而言之,我想将第 2 个数据帧列 (col1,col2) 与第一个数据帧的列 (col1,col2) 映射并更改第一个数据帧的列(col3) 匹配。

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    DataFrame.merge 与辅助列的左连接和指示符参数一起使用,将==Series.eqbothDataFrame.loc 中的最后设置值进行比较:

    m = df1.merge(df2, on=['col1','col2'],indicator=True, how='left')['_merge'].eq('both')
    
    df1.loc[m, 'col3'] = 'cc'
    print (df1)
      col1 col2 col3
    0   aa    b   cc
    1   aa    d    c
    2   bb    d   cc
    3   bb    b    g
    4   cc    e   cc
    5   dd    g    c
    

    【讨论】:

    • 你能解释一下 df1.loc[m,'col3'] 是如何工作的吗?
    • @vishwajeetMane - 当然,有人用过这个solution
    【解决方案2】:

    您可以在 assign 后使用 pd.concatdrop_duplicates 数据帧 df2 上的“col3”值:

    df = pd.concat([df2.assign(col3='cc'), df1]).drop_duplicates(['col1','col2']).reset_index(drop=True)
    df
    

    输出:

      col1 col2 col3
    0   aa    b   cc
    1   cc    e   cc
    2   bb    d   cc
    3   aa    d    c
    4   bb    b    g
    5   dd    g    c
    

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2022-06-15
      • 2023-03-17
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2022-06-24
      相关资源
      最近更新 更多