用于处理字符串的lambda函数语法

2024-09-30 08:15:42 发布

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

我希望在整个数据帧列上使用lambda函数,条件是:

  • 删除第三个字符
  • 更换第四个&;带单破折号'-'的最后三个字符
  • 仅当值以“AB”开头时

使“AB123456789”变为“AB2345-89”

df = pd.DataFrame({'key':['123456789','AB123456789','CD123456789','987654321'],'adj_key':['123456789','AB123456789','CD123456789','987654321']})
    
df['adj_key'] = df['adj_key'].apply(lambda x: (delete 3rd character & replace 4th & 3rd last character with a single dash) if (value begins with 'AB'))

结果:

      key            adj_key   
0     123456789      123456789    
1     AB123456789    AB2345-89 
2     CD123456789    CD123456789
3     987654321      987654321

干杯


Tags: 数据lambdakey函数dfabwith条件
2条回答

使用lambda函数绝对可以做到这一点。但是,您也可以对列值进行切片,并将其缩回以获得所需内容。使用这种方法,它将拾取所有数据并根据指定的3个条件进行排列。与其他回答一样,长度为7或以上的回答会得到更好的结果

我是这样做的:

c = ['key','adj_key']
d = [['123456789','123456789'],    
     ['AB123456789','AB2345-89'],
     ['CD123456789','CD123456789'],
     ['987654321','987654321']]

import pandas as pd
df = pd.DataFrame(d,columns=c)
print (df)

df['adjkey'] = df['key']
df.loc[df['key'].str[:2] == 'AB','adjkey'] = df['key'].str[:2]+df['key'].str[3:-4]+'-'+df['key'].str[-2:]

print (df)

其输出为:

原始数据帧:

           key      adj_key
0    123456789    123456789
1  AB123456789    AB2345-89
2  CD123456789  CD123456789
3    987654321    987654321

新数据帧:

           key      adj_key       adjkey
0    123456789    123456789    123456789
1  AB123456789    AB2345-89    AB2345-89
2  CD123456789  CD123456789  CD123456789
3    987654321    987654321    987654321

只有当所有AB字符串的长度均为>;=7:

df['adj_key'] = df['key'].apply(lambda x: x[:2]+x[3:-4]+'-'+x[-2:] if x.startswith('A') else x)

输出:

           key      adj_key
0    123456789    123456789
1  AB123456789    AB2345-89
2  CD123456789  CD123456789
3    987654321    987654321

相关问题 更多 >

    热门问题