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

Din*_*ius 1 python pandas

这是我的数据框:

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
Run Code Online (Sandbox Code Playgroud)

我需要计算的平均值TIME_1TIME_2各组合按UD,和QTY。然后,我想添加新列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
Run Code Online (Sandbox Code Playgroud)

我写了这段代码,对行进行分组,计算平均值并计算值。

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()
Run Code Online (Sandbox Code Playgroud)

但是,它没有计算平均时间,而是计算平均QTYGRADE,列也UD消失了。

Ted*_*rou 5

无需合并或分配即可在同一步骤中进行所有不同类型的聚合。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
Run Code Online (Sandbox Code Playgroud)

  • 看来您只按UD和QTY分组,而不按GRADE分组。您的最终数据框与您编写的内容不匹配 (2认同)