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

Pandas多索引DataFrame按季度分组对车型按销量降序排序方法

多层索引DataFrame按季度分组的销量降序排序实现

问题描述

我有一个以销售员(Salesperson)、年份(year)、季度(quarter)、**车型(Car model)**为多层索引(MultiIndex)的DataFrame,需要在每个季度分组内,按units sold(销量)降序排序,让销量最高的车型排在最前面。例如Tom在2022年Q1的最终排序需满足Benz居首、Audi居中、Ford末位。

示例数据代码

import pandas as pd
import numpy as np

# 构建多层索引
cars_sold = pd.MultiIndex.from_product([
    ['Tom','Jerry'],
    ['2022', '2023'],
    ['Q1', 'Q2', 'Q3', 'Q4'],
    ['Ford', 'Audi', 'Benz']])
columns = ['units sold']
# 生成示例DataFrame
df = pd.DataFrame(
    np.arange(48).reshape((len(cars_sold), len(columns))),
    index=cars_sold,
    columns=columns)

解决方案

通过groupby按前三层索引分组,再在组内按销量降序排序即可实现需求:

# 按销售员、年份、季度分组,组内按销量降序排序
sorted_df = df.groupby(level=[0, 1, 2], group_keys=False).apply(
    lambda x: x.sort_values('units sold', ascending=False)
)

# 验证Tom 2022年Q1的排序结果
print(sorted_df.loc[('Tom', '2022', 'Q1')])

代码说明

  • groupby(level=[0,1,2]):指定按多层索引的前三个层级(销售员、年份、季度)分组,确保每个分组对应某销售员某年度某季度的所有车型数据。
  • group_keys=False:避免在结果中生成额外的分组键索引,保持原多层索引结构。
  • sort_values('units sold', ascending=False):对每个分组内的数据按销量列降序排序,让销量最高的车型排在组内首位。

验证结果

运行代码后,Tom 2022年Q1的输出结果如下,符合需求:

units sold
Tom 2022 Q1 Benz            2
            Audi            1
            Ford            0

内容的提问来源于stack exchange,提问作者Novice Python charmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:33:29