Skip to main content
 首页 » 编程设计

python之对行进行分组并计算平均值和计数

2025年05月04日15三少

这是我的数据框:

df =  
UD   QTY   GRADE   TIME_1   TIME_2 
1    20    5       22.5     16.1 
1    20    5       26.2     19.5 
1    20    5       30.0     14.0 
1    20    4       20.0     18.5 
2    25    4       23.3     19.9 

我需要计算每个 UD 和 QTY 组合的 TIME_1 和 TIME_2 的平均值。然后我想添加新列 GRADE_COUNT 来存储每组的总行数。例如,在上面给出的数据集中,每组有 4 行,定义为 UD = 1 和 QTY = 20。

结果应该是这样的:

df =  
 
UD  QTY  MEAN_TIME_1   MEAN_TIME_2   COUNT 
1   20   24.67         17.02         4 
2   25   23.3          19.9          1 

我编写了这段代码,用于对行进行分组、计算平均值和计算值。

groupby_object = df[['UD', 'QTY', 'GRADE', 'TIME_1', 'TIME_2']].groupby(['TIME_1', 'TIME_2]) 
 
df = groupby_object.agg('mean').rename(columns = lambda x: x + ' mean').join(pd.DataFrame(groupby_object.size(),columns=['counts'])).reset_index() 

但它不是计算平均时间,而是计算平均 QTY 和 GRADE,UD 列也消失了。

请您参考如下方法:

可以在同一步骤中执行所有不同类型的聚合,而无需合并或分配。 groupby.agg 允许您使用映射到所用聚合函数的列字典来执行此操作

df1 = df.groupby(['UD', 'QTY']).agg({'TIME_1': 'mean',  
                                     'TIME_2': 'mean',  
                                     'GRADE':'count'}).reset_index() 
 
   UD  QTY  TIME_1  GRADE  TIME_2 
0   1   20  24.675      4  17.025 
1   2   25  23.300      1  19.900