我想知道在pandas中最有效的方法是创建一个新的列“stage”,它在四列中提取不是'None'的值,并将该值用于'stage'列。然后,在阶段列提取出每行中不为None的任何值之后,可以删除剩余的四列。
请注意,相关列中的值是字符串类型,None实际上不是Nonetype。
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']})
考虑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']])