Pandas Groupby分组如何同时对不同列使用sum求和与mean求均值
实现方法
完全可以直接实现,你只需要使用pandas的agg()方法为不同列指定不同的聚合规则即可,不需要拆分DataFrame再拼接。
基础写法(列数量少的场景)
直接给每个数值列指定对应聚合逻辑:
final_df = df.groupby([ pd.Grouper(freq="60min", key="ds"), "name" ]).agg( val1=("val1", "mean"), # val1取分组均值 val2=("val2", "sum"), # val2取分组求和 val3=("val3", "mean") # val3取分组均值 ).reset_index()
末尾加的reset_index()是为了把分组用的ds、name从索引转回普通列,和你预期的输出格式对齐,不需要索引格式的话可以去掉这部分。
批量写法(列数量多的场景)
如果除了val2之外其他所有数值列都要取均值,不需要手动逐个指定,批量生成聚合规则即可:
# 初始化所有非分组列默认使用均值聚合 agg_rule = {col: "mean" for col in df.columns if col not in ["ds", "name"]} # 单独修改val2的聚合规则为求和 agg_rule["val2"] = "sum" final_df = df.groupby([ pd.Grouper(freq="60min", key="ds"), "name" ]).agg(agg_rule).reset_index()
以上两种写法最终的输出结果和你给出的预期样例完全一致。
内容的提问来源于stack exchange,提问作者Denver Dang
相关产品推荐
相关产品推荐

