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

pandas:从另一列修改dataframe中的值

  •  1
  • SaadH  · 技术社区  · 5 年前

        site          code
        ---           ---
    0   apple_123     45
    1   apple_456     xy_33
    2   facebook_123  24
    3   google_123    NaN
    4   google_123    pq_51
    

        site            code
        ---             ---
    0   apple_123       45
    1   apple_456_xy    33
    2   facebook_123    24
    3   google_123      NaN
    4   google_123_pq   51
    

    我已经能够获得需要修改的行,但无法进一步:

    import numpy as np
    import pandas as pd
    
    site = ['apple_123','apple_456','facebook_123','google_123','google_123']
    code = [45,'xy_33',24,np.nan,'pq_51']
    df = pd.DataFrame(list(zip(site,code)), columns=['site','code'])
    
    df[(~df.code.astype(str).str.isdigit())&(~df.code.isna())] 
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   jezrael    5 年前

    使用 Series.str.extract 用于将非数字和数字值获取给helper DataFrame 然后分别处理每个列-删除 _ 通过 Series.str.strip Series.radd 并将缺少的值转换为emty字符串,最后添加到 code Series.fillna 用于替换未加工值 1 列到原始值:

    df1 = df.code.str.extract('(\D+)(\d+)')
    
    df['site'] += df1[0].str.strip('_').radd('_').fillna('')
    df['code'] = df1[1].fillna(df['code'])
    print (df)
                site code
    0      apple_123   45
    1   apple_456_xy   33
    2   facebook_123   24
    3     google_123  NaN
    4  google_123_pq   51