Using if in lambda to manipulate strings in pandas

In [1]:
import pandas as pd
import regex as re
In [2]:
welle = ['WDR Funkhaus Europa Süpersong', '1LIVE Dennis ruft an', 'WDR 2 Arena', 'WDR ZeitZeichen', 'WDR 3 Bücher']
df = pd.DataFrame(welle)
df['welle'] = df[0].rename('welle')
In [3]:
df
Out[3]:
0 welle
0 WDR Funkhaus Europa Süpersong WDR Funkhaus Europa Süpersong
1 1LIVE Dennis ruft an 1LIVE Dennis ruft an
2 WDR 2 Arena WDR 2 Arena
3 WDR ZeitZeichen WDR ZeitZeichen
4 WDR 3 Bücher WDR 3 Bücher
In [4]:
test = re.search('WDR \d', df['welle'][2])
test
Out[4]:
<regex.Match object; span=(0, 5), match='WDR 2'>
In [5]:
df['regex'] = df['welle'].apply(lambda val: val.split(' ', maxsplit=2)[2] if re.search('WDR \d', val) else val.split(' ', maxsplit=1)[1])
df
Out[5]:
0 welle regex
0 WDR Funkhaus Europa Süpersong WDR Funkhaus Europa Süpersong Funkhaus Europa Süpersong
1 1LIVE Dennis ruft an 1LIVE Dennis ruft an Dennis ruft an
2 WDR 2 Arena WDR 2 Arena Arena
3 WDR ZeitZeichen WDR ZeitZeichen ZeitZeichen
4 WDR 3 Bücher WDR 3 Bücher Bücher
In [ ]:
 
In [6]:
# list ccomprehension
In [8]:
df['list'] = [ e.split(' ', maxsplit=1)[1] if re.search('WDR \d', e) else e.split(' ', maxsplit=1)[1] for e in df['welle']]
In [ ]:
df
In [ ]:
 
In [ ]: