Excel中按月度、美国州别提取净需求最高合作方的最简方法
分组取Top1销售记录高效实现方案
以下方案均基于BI导出的原始四列明细数据处理,无需手动删除冗余记录,输出结构可直接用于可视化项目或导入R分析。
方案1:Excel原生实现(无需插件,无格式错乱问题)
- 导入原始明细数据到Excel,确认四列列名分别为
Ship State、Month、Partner、Net Demand,删除空行、合并单元格,不要使用透视表导出的错乱垂直结构作为数据源。 - 选中全量数据区域,点击「数据」选项卡下的「排序」,设置三层排序规则:第一层关键字为
Ship State,次序升序;第二层关键字为Month,自定义序列匹配Jan到Dec的自然月份顺序;第三层关键字为Net Demand,次序降序。 - 新增名为
group_tag的辅助列,在表头下第一行(即数据第二行)输入公式=COUNTIFS($A$2:A2,A2,$B$2:B2,B2),下拉填充全列。该公式会为每个「发货州+月份」分组内的记录按排序顺序编号,每个分组内净需求最高的首条记录标记值为1。 - 给全表开启筛选,在
group_tag列筛选值为1的行,复制筛选结果粘贴到新工作表即可得到目标结构,导出为CSV文件可直接导入R使用。
方案2:R语言批量处理(适合大数据量场景,秒级输出结果)
将原始明细数据导入R得到数据框(假设命名为sales_data),可通过以下任意一种方式得到结果:
- dplyr实现(逻辑直观,推荐):
library(dplyr) top1_res <- sales_data %>% group_by(`Ship State`, Month) %>% # 如需去掉并列第一的记录,可保留with_ties = FALSE参数 slice_max(order_by = `Net Demand`, n = 1, with_ties = FALSE) %>% ungroup() # 导出结果到本地 write.csv(top1_res, "state_month_top1_partner.csv", row.names = FALSE)
- 基础R实现(无需安装第三方包):
# 按净需求降序排序 sorted_data <- sales_data[order(-sales_data$`Net Demand`), ] # 按发货州、月份去重,保留每个分组首条(即净需求最高)记录 top1_res <- sorted_data[!duplicated(sorted_data[, c("Ship State", "Month")]), ]
提示:如果原始数据存在同州同月同净需求的并列第一记录,Excel方案会默认保留排序后靠前的单条记录;R的dplyr方案如果去掉
with_ties = FALSE参数,会保留所有并列第一的记录,可根据实际业务需求选择。
内容的提问来源于stack exchange,提问作者user14452102
相关产品推荐
相关产品推荐

