Python 如果其他列包含字符串,则根据定义的列表创建列

Python 如果其他列包含字符串,则根据定义的列表创建列,python,python-3.x,pandas,list,Python,Python 3.x,Pandas,List,很抱歉标题不明确 我有一个预定义的列表 list = ['ABC', 'DEF', 'GHI', 'JKL'] 我有下表 Item# Value 1 'DEF-1234' 2 'some_text_ABC' 3 'GHI_1" 4 'Item is: ABC' 5 '7713-23-88' 6 'ABC' 我想根据“Value”列提取以下键 Item# V

很抱歉标题不明确

我有一个预定义的列表

list = ['ABC', 'DEF', 'GHI', 'JKL']
我有下表

Item#      Value
  1        'DEF-1234'
  2        'some_text_ABC'
  3        'GHI_1"
  4        'Item is: ABC'
  5        '7713-23-88'
  6        'ABC'
我想根据“Value”列提取以下键

Item#      Value              Key
  1        'DEF-1234'         'DEF'
  2        'some_text_ABC'    'ABC'
  3        'GHI_1"            'GHI'
  4        'Item is: ABC'     'ABC'
  5        '7713-23-88'        NA
  6        'ABC'              'ABC'
我在考虑某种形式的elif循环,但我怀疑熊猫有什么秘密


提前非常感谢

您可以做一个
str.extract

df['Key'] = df['Value'].str.extract(fr'({"|".join(lst)})')[0]
输出:

   Item#            Value  Key
0      1       'DEF-1234'  DEF
1      2  'some_text_ABC'  ABC
2      3          'GHI_1"  GHI
3      4   'Item is: ABC'  ABC
4      5     '7713-23-88'  NaN
5      6            'ABC'  ABC
           Value  key
0       DEF-1234  DEF
1  some_text_ABC  ABC
2          GHI_1  GHI
3   Item is: ABC  ABC
4     7713-23-88   NA
5            ABC  ABC

您可以定义一个扫描所有键的函数,然后使用apply()创建新列

li = ['ABC', 'DEF', 'GHI', 'JKL']

def check_key(st):
    keys = [el for el in li if el in st]
    return  keys[0] if keys else 'NA'

df['key'] = df['Value'].apply(check_key)
输出:

   Item#            Value  Key
0      1       'DEF-1234'  DEF
1      2  'some_text_ABC'  ABC
2      3          'GHI_1"  GHI
3      4   'Item is: ABC'  ABC
4      5     '7713-23-88'  NaN
5      6            'ABC'  ABC
           Value  key
0       DEF-1234  DEF
1  some_text_ABC  ABC
2          GHI_1  GHI
3   Item is: ABC  ABC
4     7713-23-88   NA
5            ABC  ABC