跨多个数据帧列Findall

2024-10-04 03:26:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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,而不将列连接在一起?提前谢谢


Tags: rel1dfdatareturnstepstagecat
1条回答
网友
1楼 · 发布于 2024-10-04 03:26:35

筛选所需的行。使用replace将xyzss设置为null。堆叠并重置索引,您就可以将结果作为pd。系列

选项1:如果xyzss没有变化:df['filter']=df.iloc[:,1:4].replace({'xyzss':np.nan}).stack().reset_index(drop=True)

选项1:如果xyzss发生变化:

df.join(pd.Series(df.mask(~df.isin(pat), np.nan).stack().reset_index(level=1, drop=True),name='filter'))
 

相关问题 更多 >