使用子字符串和if-elif条件创建新列
嗨,你们好,
我刚接触巨蟒,所以请善待我。
以下是数据框和要求:
选择 | 换行 | 行号
- data = {'id': ['aa11bc', 'bb22cd', 'cc33ef', 'dd44gh', 'ee55ij','ff66kl','gg77mn','hh88op'],
- 'direction': ["north, south, east, west", "north, south, east, west", "north, south/, *east, \west%", "north, south, east, west",
- "north, south, east, west","north, south, east, west","north, south, east, west"
- ,"north, south, east, west"]}
- df = pd.DataFrame(data, columns = ['id','direction'])
- df
- Requirement:
- #if id (2nd and 3rd letter) in ('a1','b2') then new_col should have north as an observation from direction column
- #else if id (2nd and 3rd letter) in ('c3','d4') then new_col should have south as an observation from direction column
- #else if id (2nd and 3rd letter) in ('e5','f6') then new_col should have east as an observation from direction column
- #else if id (2nd and 3rd letter) in ('g7','h8') then new_col should have west as an observation from direction column
我尝试了下面的代码:但输出不正确,它没有满足所需的输出。
选择 | 换行 | 行号
- new_col=[]
- for i in df["id"]:
- if i[1:3].lower()in ('a1','b2'):
- new_col=df["direction"].str.split(',').str[0].str.replace('\W+',' ').str.strip()
- elif i[1:3].lower()in ('c3','d4'):
- new_col=df["direction"].str.split(',').str[1].str.replace('\W+',' ').str.strip()
- elif i[1:3].lower()in ('e5','f6'):
- new_col=df["direction"].str.split(',').str[2].str.replace('\W+',' ').str.strip()
- elif i[1:3].lower()in ('g7','h8'):
- new_col=df["direction"].str.split(',').str[3].str.replace('\W+',' ').str.strip()
- df["position"]=new_col
- print(df)
- And the output as follows:
- id direction position
- 0 aa11bc north, south, east, west west
- 1 bb22cd north, south, east, west west
- 2 cc33ef north, south/, *east, \west% west
- 3 dd44gh north, south, east, west west
- 4 ee55ij north, south, east, west west
- 5 ff66kl north, south, east, west west
- 6 gg77mn north, south, east, west west
- 7 hh88op north, south, east, west west
请指点一下。