如何统计Pandas DataFrame列值中指定品牌列表元素数量
用Pandas统计指定品牌在字符串中的出现数量
需要统计指定品牌列表brand_List = ["Brand1", "Brand2", "Brand3"]中的品牌,在DataFrame的Col_1列各字符串内出现的不同品牌数量,生成结果列Desired_Col_2。示例数据与预期输出如下:
| Col_1 | Desired_Col_2 |
|---|---|
| Brand1_bla_Brand2 | 2 |
| Brand3 | 1 |
| bla_bla | 0 |
| Brand2_Brand3 | 2 |
| Brand2_Brand3_Brand1 | 3 |
解决方案
方法一:直观遍历法(适合小数据集)
先导入Pandas并构造示例数据,再通过apply遍历每行字符串,统计符合条件的品牌数量:
import pandas as pd # 构造示例DataFrame data = { "Col_1": ["Brand1_bla_Brand2", "Brand3", "bla_bla", "Brand2_Brand3", "Brand2_Brand3_Brand1"] } df = pd.DataFrame(data) brand_List = ["Brand1", "Brand2", "Brand3"] # 定义统计函数:检查每个品牌是否在当前字符串中,统计总数 def count_brands(text): return sum(1 for brand in brand_List if brand in text) # 生成结果列 df["Desired_Col_2"] = df["Col_1"].apply(count_brands)
方法二:矢量化操作法(适合大数据集)
利用Pandas的矢量化字符串操作,避免逐行循环,效率更高:
import pandas as pd # 构造示例DataFrame data = { "Col_1": ["Brand1_bla_Brand2", "Brand3", "bla_bla", "Brand2_Brand3", "Brand2_Brand3_Brand1"] } df = pd.DataFrame(data) brand_List = ["Brand1", "Brand2", "Brand3"] # 对每个品牌生成布尔值Series,再按列求和得到每行的品牌数量 brand_masks = [df["Col_1"].str.contains(brand) for brand in brand_List] df["Desired_Col_2"] = pd.concat(brand_masks, axis=1).sum(axis=1)
执行上述代码后,df会新增Desired_Col_2列,结果与示例完全一致。
内容的提问来源于stack exchange,提问作者Alexandra Morel-Fonteray
相关产品推荐
相关产品推荐

