Python中如何拆分DataFrame字段并按年份统计各产品的出现数量
解决方案
使用pandas的explode方法配合字段拆分即可实现需求,完整可运行代码如下:
import pandas as pd # 你实际使用时把下面这段替换成读取csv的代码:df = pd.read_csv("你的文件路径.csv") df = pd.DataFrame({ 'Event_Year': [2015,2015,2015,2016,2016,2017,2017,2017], 'Product name': ['Cola', 'Pepsi, Cola', 'Fanta, Pepsi', 'Cola', 'Sprite, Cola', 'Cola, Fanta, Sprite', 'Sprite,Cola', 'Cola'] }) # 1. 按逗号拆分产品列,自动忽略逗号前后的空格,再展开为单行单个产品的结构 df['Product name'] = df['Product name'].str.split(',\s*') df_exploded = df.explode('Product name', ignore_index=True) # 2. 按年份+产品分组统计出现次数 result = df_exploded.groupby(['Event_Year', 'Product name'], as_index=False).size() result = result.rename(columns={'size': 'Product count'}) # 如只需2017年的结果,新增过滤逻辑即可 result_2017 = result[result['Event_Year'] == 2017] print(result_2017)
运行后输出结果和你预期完全一致:
| Event_Year | Product name | Product count |
|---|---|---|
| 2017 | Cola | 3 |
| 2017 | Fanta | 1 |
| 2017 | Sprite | 2 |
关键逻辑说明
str.split(',\s*'):用正则匹配逗号加任意数量空格作为分隔符,兼容你数据里逗号后有时有空格有时无的情况,避免拆分出带冗余空格的产品名explode:把列表形式的多产品列拆成多行,每个产品单独占一行,后续直接分组统计即可groupby(..).size():按年份、产品两个字段分组统计每组行数,即对应产品的出现次数
内容的提问来源于stack exchange,提问作者Omoton
相关产品推荐
相关产品推荐

