代码之家  ›  专栏  ›  技术社区  ›  Keenan Burke-Pitts

使用Pandas将多个列转换为一个列

  •  0
  • Keenan Burke-Pitts  · 技术社区  · 7 年前

    我有这样一个数据框架结构: dataframe snapshot

    我想知道熊猫最有效的方法是什么,创建一个新的列“stage”,提取四列中不是“None”的值,并将该值用于“stage”列。 在stage列提取出每行中没有的任何值后,可以删除其余四列。

    下面是所涉及的每列的唯一值的另一个快照: unique values

    请注意,所讨论的列中的值是字符串类型,而None实际上不是Nonetype。

    2 回复  |  直到 4 年前
        1
  •  2
  •   BENY    7 年前
    df['New']=df[['A','B','C']].replace('None','').sum(1)
    df
    Out[1477]: 
          A     B     C New
    0  None     B  None   B
    1     A  None  None   A
    2  None  None     C   C
    

    数据输入

    df=pd.DataFrame({'A':['None','A','None'],'B':['B','None','None'],'C':['None','None','C']})
    
        2
  •  2
  •   Parfait    7 年前

    考虑 combine_first ,假设 没有一个 不是字符串文字 'None' .

    df['stage'] = df['doggo'].combine_first(df['floorfer'])\
                             .combine_first(df['pupper'])\ 
                             .combine_first(df['puppo'])
    

    或者,对于干式er进近,使用 reduce :

    from functools import reduce
    ...
    
    df['stage'] = reduce(lambda x,y: x.combine_first(y), 
                         [df['doggo'], df['floorfer'], df['pupper'], df['puppo']])