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

遍历pandas DataFrame提取各tag极值、对应批次及统计指标的方法

代码问题说明

你写的初始代码存在几个核心问题:

  • 遍历列的逻辑错误:df.shape[3:]是取元组的第3位及以后的元素,正常二维DataFrame的shape只有(行数,列数)两个元素,这里取值必然为空,循环不会执行
  • 列名选取错误:你没有排除非Tag列Batch_Name,会把批次列也纳入统计
  • 方法名错误:pandas计算列平均值的方法是mean()而非avg()
  • 缺少极值对应批次的获取逻辑,没有针对Batch_Name的关联查询

实现方案

你可以通过把Batch_Name设为行索引,直接用idxmax()/idxmin()获取极值对应的批次名称,完整实现代码如下:

import pandas as pd

def tag_stats(df):
    # 先把Batch_Name设为索引,方便获取极值对应的批次
    df_temp = df.set_index('Batch_Name')
    # 筛选所有Tag列,默认Tag列名以'Tag '开头,可根据实际命名规则调整筛选逻辑
    tag_cols = [col for col in df_temp.columns if col.startswith('Tag ')]
    result = []
    for tag in tag_cols:
        col_data = df_temp[tag]
        # 计算单个Tag的所有统计项
        max_val = col_data.max()
        max_batch = col_data.idxmax()
        min_val = col_data.min()
        min_batch = col_data.idxmin()
        avg_val = col_data.mean()
        std_val = col_data.std()
        result.append({
            '标签名': tag,
            '最大值': max_val,
            '最大值对应批次': max_batch,
            '最小值': min_val,
            '最小值对应批次': min_batch,
            '平均值': avg_val,
            '标准差': std_val
        })
    # 转换为DataFrame返回
    return pd.DataFrame(result)

# 测试用例
if __name__ == '__main__':
    # 构造示例DataFrame
    test_df = pd.DataFrame({
        'Batch_Name': ['2019-01', '2019-02'],
        'Tag 1': [1, 2],
        'Tag 2': [3, 3]
    })
    stats_result = tag_stats(test_df)
    print(stats_result)

补充说明

如果有多个批次对应同一个极值,idxmax()/idxmin()会返回第一个出现的批次,如果你需要返回所有极值批次,可以把对应逻辑替换为col_data[col_data == col_data.max()].index.tolist(),结果会以列表形式存储所有符合条件的批次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:03