代码之家  ›  专栏  ›  技术社区  ›  abhi krishnan

从df1和df2创建数据帧,如果df1列值中不存在列值,则从df2获取列值的空值

  •  1
  • abhi krishnan  · 技术社区  · 2 年前
    df1 = pd.DataFrame({'call_sign': ['ASD','BSD','CDSF','GFDFD','FHHH'],'frn':['123','124','','656','']})
    
    df2 = pd.DataFrame({'call_sign': ['ASD','CDSF','BSD','GFDFD','FHHH'],'frn':['1234','','124','','765']})
    

    需要获得一个新的df

    df2 = pd.DataFrame({'call_sign': ['ASD','BSD','CDSF','GFDFD','FHHH'],'frn':['123','','124','656','765']})
    

    如果df1中缺少frn,我需要从df2中获取frn,并创建一个新的df

    1 回复  |  直到 2 年前
        1
  •  1
  •   jezrael    2 年前

    将空字符串替换为缺少的值并使用 DataFrame.set_index 具有 DataFrame.fillna ,因为需要像这样订购 df2.call_sign 添加 DataFrame.reindex :

    df = (df1.set_index('call_sign').replace('', np.nan)
              .fillna(df2.set_index('call_sign').replace('', np.nan))
             .reindex(df2['call_sign']).reset_index())
    print(df)
      call_sign  frn
    0       ASD  123
    1      CDSF  NaN
    2       BSD  124
    3     GFDFD  656
    4      FHHH  765
    
        2
  •  0
  •   mozway    2 年前

    如果要更新 df2 你可以使用 boolean indexing :

    # is frn empty string?
    m = df2['frn'].eq('')
    # update those rows from the value in df1
    df2.loc[m, 'frn'] = df2.loc[m, 'call_sign'].map(df1.set_index('call_sign')['frn'])
    

    已更新 df2 :

      call_sign   frn
    0       ASD  1234
    1      CDSF      
    2       BSD   124
    3     GFDFD   656
    4      FHHH   765
    
        3
  •  0
  •   Mazhar    2 年前
    temp = df1.merge(df2,how='left',on='call_sign')
    df1['frn']=temp.frn_x.where(temp.frn_x!='',temp.frn_y)
    
        call_sign   frn
    0   ASD         123
    1   BSD     
    2   CDSF        124
    3   GFDFD       656
    4   FHHH        765