Python 字典搜寻出现dataframe一列中出现次数

有一个字典:
“Supplier A": ["A1", "A2"], “Supplier B": ["BD", "AS"]

有一个dataframe,其中一列为:

index
A10A2&A29; ASKX
BAD102
……
A129; A8SZ
B102&AS129

我想先用“; ”分割出字符串,然后再提取所有supplier A或者B字典内字符出现过的数量,也就是:

supplier Asupplier B
11
00
…………
10
01

第一行Supplier A里包含的A1, A2都出现了,最后一行Supplier B里包含的B1, AS都出现了,但是"; "分割成两个字符串,每个字符串出现一次即算一次,所以算一次。

基于Monster 组和GPT的调写:
定义一个函数,输入一个字符串和一个供应商字典,输出该字符串中该供应商字典内字符出现的次数。

def count_supplier(string, supplier_dict):
    count = 0
    for value_list in supplier_dict.values():
        for value in value_list:
            if value in string:
                count += 1
    return count


对dataframe中的字符串列进行处理,先按照"; "进行分割,再调用count_supplier函数进行计数,最后将结果放入新的两列中。

import pandas as pd

# 定义供应商字典
supplier_dict = {
    "Supplier A": ["A1", "A2"],
    "Supplier B": ["B1", "AS"]
}

# 定义函数
def count_supplier(string, supplier_dict):
    count = 0
    for value_list in supplier_dict.values():
        for value in value_list:
            if value in string:
                count += 1
    return count

# 读取数据
df = pd.read_csv('data.csv')

# 分割字符串并计数
df['split'] = df['index'].str.split('; ')
df['supplier A'] = df['split'].apply(lambda x: sum([count_supplier(s, supplier_dict) for s in x if s]))
df['supplier B'] = df['split'].apply(lambda x: sum([count_supplier(s, supplier_dict) for s in x if s]))

# 删除中间列并输出结果
df.drop('split', axis=1, inplace=True)
print(df)