以下代码有效并显示所需的结果。 如果有多个值,我喜欢仅从 available 列表中以相反的顺序为 SOURCE 列选择值。
import pandas as pd
available = ['a','b']
df = pd.DataFrame.from_dict({'SOURCE': ['x-a', 'b-y-z', 'c'] })
for entry in df['SOURCE']:
if not '-' in entry: continue
for col in entry.split("-")[::-1]:
if col in available:
df.loc[ df['SOURCE'] == entry,'SOURCE'] = col
break
print(df)
Output:
SOURCE
0 a
1 b
2 c
有没有更 Pythonic 的方法来做到这一点?
更新:字符只是实际问题中字符串的地方 Holder。如果我在可用列表中没有找到匹配项,它应该返回原始值。
答案 0 :(得分:1)
您可以使用str.extract
:
pat = '|'.join(available[::-1])
df['SOURCE'] = df.SOURCE.str.extract(f'({pat})').fillna(df['SOURCE'])
输出:
SOURCE
0 a
1 b
2 c