如何在DataFrame中实现层级分组展示并添加不重复的StoreCt列
解决方案
要实现树形层级显示、添加不重复的StoreCt列的需求,可按以下步骤操作:
步骤1:计算并添加StoreCt列
先通过分组统计每个Retailer的门店数,再将统计值映射到原DataFrame中,为每个Retailer对应的行先赋上StoreCt值:
import pandas as pd # 假设原始DataFrame为df df['StoreCt'] = df['Retailer'].map(df.groupby('Retailer').size())
步骤2:按指定层级排序
按照DC→Retailer→Product的顺序对DataFrame排序,确保同组数据集中在一起:
df_sorted = df.sort_values(['DC', 'Retailer', 'Product'])
步骤3:处理重复值,实现树形空白效果
将同一分组内重复的DC、Retailer和StoreCt值替换为空字符串,达到树形层级的显示效果:
# 重复的DC列值置空 df_sorted['DC'] = df_sorted['DC'].mask(df_sorted['DC'].duplicated(), '') # 重复的Retailer列值置空 df_sorted['Retailer'] = df_sorted['Retailer'].mask(df_sorted['Retailer'].duplicated(), '') # 同一Retailer下除第一行外的StoreCt置空 df_sorted['StoreCt'] = df_sorted['StoreCt'].mask(df_sorted['Retailer'].duplicated(), '')
步骤4:调整列顺序
将列调整为需求指定的DC→Retailer→StoreCt→Product→Cs→Volume→Velocity顺序:
final_df = df_sorted[['DC', 'Retailer', 'StoreCt', 'Product', 'Cs', 'Volume', 'Velocity']]
最终结果
运行上述代码后,final_df的输出将与期望的树形结构完全一致:
| DC | Retailer | StoreCt | Product | Cs | Volume | Velocity |
|---|---|---|---|---|---|---|
| ABC | joe | 1 | bars | Cs | Cost | Velocity |
| randy | 1 | bars | Cs | Cost | Velocity | |
| DFC | joe | 3 | drinks1 | Cs | Cost | Velocity |
| drinks2 | Cs | Cost | Velocity | |||
| bars2 | Cs | Cost | Velocity | |||
| peter | 1 | drinks2 | Cs | Cost | Velocity | |
| XYZ | joe | 1 | snacks | Cs | Cost | Velocity |
| john | 1 | drinks | Cs | Cost | Velocity |
内容的提问来源于stack exchange,提问作者ners23
相关产品推荐
相关产品推荐

