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

时间:2017-12-27 15:46:51

标签: python pandas dataframe apply series

我有一个数据框结构如下: dataframe snapshot

我想知道pandas最有效的方法是创建一个新列" stage"提取任何不是“无”的值。在四列中,并将该值用于' stage'列。在阶段列提取出每行中不包含任何值的任何值之后,可以删除剩余的四列。

以下是每个相关列的唯一值的另一个快照: unique values

请注意,相关列中的值是字符串类型,而“无”实际上是非类型。

2 个答案:

答案 0 :(得分:1)

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']})

答案 1 :(得分:0)

考虑'None',假设不是字符串文字df['stage'] = df['doggo'].combine_first(df['floorfer'])\ .combine_first(df['pupper'])\ .combine_first(df['puppo'])

reduce

或者,对于DRY-er方法,请使用from functools import reduce ... df['stage'] = reduce(lambda x,y: x.combine_first(y), [df['doggo'], df['floorfer'], df['pupper'], df['puppo']])

{{1}}