从大熊猫的可用列表中选择值

时间:2021-02-11 15:08:55

标签: python pandas

以下代码有效并显示所需的结果。 如果有多个值,我喜欢仅从 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。如果我在可用列表中没有找到匹配项,它应该返回原始值。

1 个答案:

答案 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
相关问题