You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas透视表多颜色/重复颜色计算及展示优化问询

解决方案:重构统计逻辑+针对性可视化

一、避免列爆炸:先计算订单级别的颜色统计指标

不要直接把Size和Color同时放透视表的columns,而是先对每个订单组(USIM+Webshop_Order)计算颜色相关的聚合指标,再和之前的尺码统计合并,数据结构会非常紧凑。

代码示例:计算颜色统计指标

import pandas as pd

# 按订单组计算颜色相关指标
color_stats = df.groupby(['USIM', 'Webshop_Order']).agg(
    # 该订单下的唯一颜色数量
    unique_color_count=('Color', 'nunique'),
    # 是否包含多种颜色(唯一数>1)
    multiple_colors_in_transaction=('Color', lambda x: x.nunique() > 1),
    # 是否存在重复颜色(总条目数>唯一数,说明同一颜色出现多次)
    duplicate_colors_in_transaction=('Color', lambda x: len(x) > x.nunique())
).reset_index()

# 合并之前已有的尺码统计结果(假设你的尺码统计结果叫size_stats)
combined_stats = pd.merge(size_stats, color_stats, on=['USIM', 'Webshop_Order'], how='outer')

combined_stats的结构是每行对应一个订单组,列是各类统计指标(比如multiple_sizes_in_transaction、duplicate_colors_in_transaction等),完全避免了列爆炸问题。

二、可视化方案:根据需求选对应图表

1. 多维度订单分布统计(多尺码/多颜色交叉)

用分组柱状图直观展示不同组合的订单数量:

import seaborn as sns
import matplotlib.pyplot as plt

# 统计交叉分组的订单数
cross_counts = combined_stats.groupby(
    ['multiple_sizes_in_transaction', 'multiple_colors_in_transaction']
).size().reset_index(name='order_count')

# 绘制分组柱状图
plt.figure(figsize=(10, 6))
sns.barplot(
    x='multiple_sizes_in_transaction', 
    y='order_count', 
    hue='multiple_colors_in_transaction', 
    data=cross_counts
)
plt.title('订单按多尺码/多颜色分布')
plt.xlabel('是否包含多尺码')
plt.ylabel('订单数量')
plt.legend(title='是否包含多颜色')
plt.tight_layout()
plt.show()

2. 各USIM下的重复颜色/尺码订单占比

用计数图对比不同USIM的指标分布:

plt.figure(figsize=(12, 6))
sns.countplot(
    x='USIM', 
    hue='duplicate_colors_in_transaction', 
    data=combined_stats
)
plt.title('各USIM下重复颜色订单分布')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

3. 查看具体尺码-颜色的订单量(热力图替代透视表)

如果确实需要看每个尺码+颜色的订单量,用热力图替代平铺的透视表列:

# 计算USIM-尺码-颜色的订单量总和
size_color_summary = df.groupby(['USIM', 'Size', 'Color'])['Demand_Qty'].sum().unstack(['Size', 'Color'])

# 绘制聚类热力图(自动合并相似分组,提升可读性)
sns.clustermap(
    size_color_summary.fillna(0), 
    cmap='Blues', 
    figsize=(15, 10),
    row_cluster=True,
    col_cluster=True
)
plt.title('USIM-尺码-颜色订单量热力图')
plt.show()

核心思路总结

把维度字段(Size/Color)从透视表的columns转移到聚合计算的指标中,先得到订单级的统计结果,再做可视化,从根源上解决列过多的问题。如果需要看具体维度组合的数值,用热力图这种紧凑的可视化形式替代平铺的表格列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:15:21