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