Pandas中计算DataFrame多列日均值并插入对应均值行的方法
Pandas 按日期分组插入均值行实现方案
核心逻辑分4步走,无冗余代码,复用性高:
- 自动过滤需要计算均值的数值列,排除
date、time两个非计算列 - 按
date字段分组一次性算出所有日期的数值列均值 - 逐组拼接原始数据和符合格式要求的均值行
- 合并所有分组得到最终结果
可直接运行的代码
假设你已经读取完成的DataFrame变量名为df:
import pandas as pd # 筛选参与均值计算的列:排除date、time,仅保留数值类型列 calc_cols = df.select_dtypes(include=["number"]).columns.difference(["date", "time"]).tolist() # 按date分组计算各数值列日均值,sort=False保留原表日期出现顺序 daily_avg = df.groupby("date", sort=False)[calc_cols].mean().reset_index() output_chunks = [] # 遍历每个日期的原始分组 for current_date, group_data in df.groupby("date", sort=False): # 提取当前日期对应的均值 current_avg = daily_avg[daily_avg["date"] == current_date].iloc[0].to_dict() # 按要求填充均值行的固定字段 current_avg["date"] = "Average" current_avg["time"] = pd.NA # 原始分组末尾追加均值行,存入结果块 output_chunks.append( pd.concat([group_data, pd.DataFrame([current_avg])], ignore_index=True) ) # 拼接所有块得到最终表 final_df = pd.concat(output_chunks, ignore_index=True)
常见调整说明
- 如果需要指定均值保留的小数位数,修改计算
daily_avg的行即可,比如保留2位小数就写成df.groupby("date", sort=False)[calc_cols].mean().round(2).reset_index() - 如果你的
time列是字符串类型,把pd.NA换成空字符串""即可 - 非数值类型的其他列(比如备注、标签类列)会在均值行自动留空,不需要额外处理
内容的提问来源于stack exchange,提问作者macb2001
相关产品推荐
相关产品推荐

