You need to enable JavaScript to run this app. Pandas DataFrame 订单列统计重复单品频次并绘制柱状图问题
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame 订单列统计重复单品频次并绘制柱状图问题

拆分统计订单单品频次并绘制柱状图的实现方法

问题原因

此前使用groupby结合count无法得到单品频次的核心逻辑问题是:分组匹配的基准是整行单元格的完整订单文本,只有内容完全一致的整段订单会被归为同一组计数,不会拆分单元格内存储的多个独立单品,最终得到的是整单的分布统计,而非单个单品的出现频次。

实现步骤

1. 加载依赖与示例数据

import pandas as pd
import matplotlib.pyplot as plt
# 解决中文显示异常
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 导入示例数据集
data = {
    "Customer name": ["Sam Doe", "John Doe", "Sammy Doe", "Jonny Doe"],
    "Order": [
        "Donut L, Burger L, Burger M",
        "Burger M",
        "Burger M, Donut L",
        "Burger L"
    ]
}
df = pd.DataFrame(data)

2. 拆分订单内的独立单品

对Order列的文本按逗号拆分,同时清除每个拆分后元素的前后空白,避免因空格差异将同一款单品识别为不同值:

# 按逗号拆分订单文本,清理每个单品的前后空格
split_orders = df["Order"].str.split(",").apply(
    lambda items: [item.strip() for item in items]
)
# 将每行的单品列表展开为独立行
all_items = split_orders.explode()

3. 统计单品累计出现频次

展开后的序列中每个元素对应一笔独立的单品订单,直接调用value_counts()即可快速得到各单品的累计出现次数:

item_counts = all_items.value_counts().sort_values(ascending=False)

针对给出的示例数据集,统计结果为:

  • Burger M:累计出现3次
  • Donut L:累计出现2次
  • Burger L:累计出现2次

4. 绘制柱状图可视化

基于统计结果直接绘制柱状图即可:

plt.figure(figsize=(9, 5))
item_counts.plot(kind="bar", color="#4895ef", width=0.6)
plt.xlabel("T恤单品(设计+尺码)")
plt.ylabel("累计订购次数")
plt.title("各款T恤单品累计订购量统计")
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

注意事项

  • 拆分后必须对每个单品做前后空格清理:原始订单中逗号分隔的单品通常带有后置空格,不清理会导致 Burger M和Burger M被判定为两个独立值,造成统计结果失真。
  • 如果实际数据中订单的分隔符不统一,可将str.split()内的分隔符替换为实际使用的字符,适配不同的订单文本格式。

内容的提问来源于stack exchange,提问作者Penny Pang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.12 17:15:08