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

问题描述 投票:0回答:2

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

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

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

请注意,相关列中的值是字符串类型,None实际上不是Nonetype。

python pandas dataframe apply series
2个回答
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']})

0
投票

考虑combine_first,假设None不是字符串文字'None'

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

或者,对于DRY-er方法,使用reduce

from functools import reduce
...

df['stage'] = reduce(lambda x,y: x.combine_first(y), 
                     [df['doggo'], df['floorfer'], df['pupper'], df['puppo']])
© www.soinside.com 2019 - 2024. All rights reserved.