data = {'Cat': ['A Phaser','A','B Phaser','B','B','B'],
'L1': ['Phase','xyzss','xyzss','Phase','xyzss','xyzss'],
'L2': ['xyzss','Stage','xyzss','xyzss','Phase2','xyzss'],
'L3': ['xyzss','xyzss','xyzss','xyzss','xyzss','Step'],
}
df = pd.DataFrame (data, columns = ['Cat','L1','L2','L3'])
def funt(s):
if re.findall(r'Phase', s, re.IGNORECASE):
return 'Phase'
elif re.findall(r'Stag', s, re.IGNORECASE):
return 'Stage'
elif re.findall(r'Step', s, re.IGNORECASE):
return 'Step'
df[['L1','L2','L3']].apply(lambda row: '_'.join(row.values.astype(str)), axis=1).apply(lambda x : funt(x))
输出:
0 Phase
1 Stage
2 None
3 Phase
4 Phase
5 Step
dtype: object
我想知道是否有另一种方法可以实现这一点,比如跨列应用findall
,而不将列连接在一起?提前谢谢
筛选所需的行。使用replace将xyzss设置为null。堆叠并重置索引,您就可以将结果作为pd。系列
选项1:如果
xyzss
没有变化:df['filter']=df.iloc[:,1:4].replace({'xyzss':np.nan}).stack().reset_index(drop=True)
选项1:如果
xyzss
发生变化:相关问题 更多 >
编程相关推荐