这是我的数据框:
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
