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

如何用Python Pandas按col1分组获取col3前3最大值并显示col2

问题描述

给定如下数据集:

col1col2col3
category1subcat110
category1subcat215
category1subcat31
category1subcat423
category2subcat110
category2subcat299
category2subcat323
category2subcat412
category2subcat510
category2subcat611
category2subcat745
category2subcat8105
category3subcat12
category3subcat29
category3subcat314
category3subcat425
.........

需求:用Python Pandas实现按col1中的类别分组,每个组内获取col3的前3个最大值,同时显示对应的col2(子类别),输出格式如下:

category1:
          subcat4  23
          subcat2  15
          subcat1  10
category2:
          subcat8  105
          subcat2  99
          subcat7  45
category3:
          subcat4  25
          subcat3  14
          subcat2  9
实现步骤
  1. 导入Pandas库
    先导入处理表格数据的核心库:

    import pandas as pd
    
  2. 创建/读取数据集
    可以用字典构造示例数据,也可以从文件读取(比如用pd.read_csv('你的文件路径.csv')):

    # 构造示例数据
    data = {
        'col1': ['category1']*4 + ['category2']*8 + ['category3']*4,
        'col2': ['subcat1', 'subcat2', 'subcat3', 'subcat4',
                 'subcat1', 'subcat2', 'subcat3', 'subcat4', 'subcat5', 'subcat6', 'subcat7', 'subcat8',
                 'subcat1', 'subcat2', 'subcat3', 'subcat4'],
        'col3': [10,15,1,23,10,99,23,12,10,11,45,105,2,9,14,25]
    }
    df = pd.DataFrame(data)
    
  3. 分组并筛选前3大值
    按col1分组,对每个组按col3降序排序后取前3行:

    # 分组后排序取前3
    top3_per_group = df.groupby('col1', group_keys=False).apply(
        lambda x: x.sort_values('col3', ascending=False).head(3)
    )
    
  4. 按需求格式输出
    遍历每个分组,打印出对应的类别、子类别和数值:

    # 按指定格式输出
    for category in top3_per_group.index.unique():
        print(f"{category}:")
        group_data = top3_per_group.loc[category]
        for _, row in group_data.iterrows():
            print(f"          {row['col2']}  {row['col3']}")
    
完整代码

整合所有步骤的完整代码:

import pandas as pd

# 构造数据(实际使用时可替换为pd.read_csv('your_file.csv'))
data = {
    'col1': ['category1']*4 + ['category2']*8 + ['category3']*4,
    'col2': ['subcat1', 'subcat2', 'subcat3', 'subcat4',
             'subcat1', 'subcat2', 'subcat3', 'subcat4', 'subcat5', 'subcat6', 'subcat7', 'subcat8',
             'subcat1', 'subcat2', 'subcat3', 'subcat4'],
    'col3': [10,15,1,23,10,99,23,12,10,11,45,105,2,9,14,25]
}
df = pd.DataFrame(data)

# 分组筛选前3大值
top3_per_group = df.groupby('col1', group_keys=False).apply(
    lambda x: x.sort_values('col3', ascending=False).head(3)
)

# 按指定格式输出
for category in top3_per_group.index.unique():
    print(f"{category}:")
    group_data = top3_per_group.loc[category]
    for _, row in group_data.iterrows():
        print(f"          {row['col2']}  {row['col3']}")

运行代码后即可得到符合需求的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:31:12