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
相关产品推荐
相关产品推荐

