遍历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
相关产品推荐
相关产品推荐

