如何对Pandas DataFrame按itemid分组并对不同列应用聚合规则
Pandas按itemid分组实现指定聚合计算
直接通过groupby配合agg方法就能实现需求,代码示例如下:
import pandas as pd # 原始数据构造(如果已有DataFrame可跳过此步) raw_data = { 'itemid': ['A1', 'A2', 'B1', 'B2', 'A1', 'A2', 'B1', 'B2'], 'clock': ['27/05/2021', '27/05/2021', '27/05/2021', '27/05/2021', '28/05/2021', '28/05/2021', '28/05/2021', '28/05/2021'], 'value_min': [4, 4, 1, 3, 8, 1, 0, 4], 'value_avg': [7, 5, 2, 20, 8, 2, 1, 7], 'value_max': [38, 15, 5, 86, 9, 5, 2, 8], 'item_type': ['cpu', 'mem', 'cpu', 'mem', 'cpu', 'mem', 'cpu', 'mem'] } df = pd.DataFrame(raw_data) # 核心分组聚合逻辑 aggregated_df = df.groupby('itemid').agg( value_min=('value_min', 'min'), value_avg=('value_avg', lambda x: round(x.mean(), 1)), value_max=('value_max', 'max'), item_type=('item_type', 'first') ).reset_index() # 可选:将平均值的小数点替换为逗号,匹配目标格式 aggregated_df['value_avg'] = aggregated_df['value_avg'].astype(str).replace('\.', ',', regex=True) print(aggregated_df)
代码说明
groupby('itemid'):以itemid为分组依据agg()方法定义各列的聚合规则:value_min:取分组内最小值value_avg:计算分组内平均值并保留1位小数,之后替换小数点为逗号(若不需要此格式可省略替换步骤)value_max:取分组内最大值item_type:由于每个itemid对应唯一的类型,直接取分组内第一个值即可
reset_index():将分组后的itemid从索引恢复为普通列
运行后得到的结果与目标DataFrame完全一致。
内容的提问来源于stack exchange,提问作者JB Rolland
相关产品推荐
相关产品推荐

