根据特定条件应用拆分

2024-10-03 06:21:09 发布

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

我有以下数据帧:

data = {'Name': ['Peter | Jacker', 'John | Parcker', 'Paul | Cash', 'Tony'],
        'Age': [10, 45, 14, 65]}
df = pd.DataFrame(data)

我想提取的是只有年满16岁的人的昵称(字符“|”后的单词)。为此,我使用以下代码:

df['nickname'] = df.apply(lambda x: x.str.split('|', 1)[-1] if x['Age'] > 16 else 0, axis=1)

但是,当我打印昵称时,我只得到以下结果:

     Name      Age  nickname
Peter | Jacker  10   0.0     
John | Parcker  45  NaN      
Paul | Cash     14   0.0     
Tony            65  NaN  

我想要的是:

     Name      Age  nickname
Peter | Jacker  10   NaN    
John | Parcker  45   Parcker      
Paul | Cash     14   NaN     
Tony            65   NaN 

我做错了什么


Tags: 数据namedfagedatanicknamecashnan
2条回答

如果条件匹配,则在split之后使用^{}和选择第二个列表,否则添加错误的值(或0,需要什么):

df['nickname'] = np.where(df['Age'] > 16, df['Name'].str.split('|', 1).str[1] , np.nan)
print (df)
             Name  Age  nickname
0  Peter | Jacker   10       NaN
1  John | Parcker   45   Parcker
2     Paul | Cash   14       NaN
3            Tony   65       NaN

对名称列应用拆分函数。请尝试以下代码:

import numpy as np

df.apply(lambda x: x['Name'].split('|', 1)[-1] if x['Age'] > 16 and len(x['Name'].split('|',1))>1 else np.nan, axis=1)

             Name  Age  nickname
0  Peter | Jacker   10       NaN
1  John | Parcker   45   Parcker
2     Paul | Cash   14       NaN
3            Tony   65       NaN

相关问题 更多 >