pandas计算DataFrame日期列的行平均值并向上取整为整数
pandas逐行计算日期列均值并向上取整实现方案
核心实现代码
直接基于现有DataFrame处理即可,不需要写额外循环:
import pandas as pd import numpy as np # 替换为你实际环境中的原始DataFrame变量名 raw_df = "替换为你的原始DataFrame变量" # 提取所有日期列(排除Hours字段列) date_columns = raw_df.columns.drop("Hours") # 逐行计算所有日期列的算术平均值,保留中间计算结果 raw_df["raw_avg"] = raw_df[date_columns].mean(axis=1) # 对均值做向上取整,转为整数类型得到目标字段 raw_df["avg_count"] = np.ceil(raw_df["raw_avg"]).astype(int) # 生成最终结果DataFrame,不需要中间结果可以去掉raw_avg字段 final_df = raw_df[["Hours", "raw_avg", "avg_count"]]
参考示例
原始输入样例
| Hours | 2024-05-01 | 2024-05-02 | 2024-05-03 |
|---|---|---|---|
| 0 | 12 | 15 | 18 |
| 1 | 7 | 9 | 8 |
| 2 | 3 | 5 | 4 |
| 3 | 22 | 19 | 24 |
计算结果输出样例
| Hours | raw_avg(均值计算中间结果) | avg_count(向上取整最终值) |
|---|---|---|
| 0 | 15.0 | 15 |
| 1 | 8.0 | 8 |
| 2 | 4.0 | 4 |
| 3 | 21.666666... | 22 |
关键说明
- 计算均值时必须传入
axis=1,默认参数是按列计算,会得到完全不符合需求的结果 - 不要用
round()做四舍五入,np.ceil()才是严格向上取整,哪怕均值是21.1也会返回整数22 - 如果不需要保留中间计算过程,最终
final_df只取["Hours", "avg_count"]两列即可
内容的提问来源于stack exchange,提问作者Carola
相关产品推荐
相关产品推荐

