python - 用 pandas 计算每日平均值
问题描述
我有一个函数可以计算同一日期的熊猫数据框“A”列中的值的平均值。有没有比最后一行中的列表理解更有效的方法?
import pandas as pd
import numpy as np
def daily_mean(df,date,col):
return df[date][col].mean()
data = np.random.rand(100)
columns = ['A']
times = pd.date_range('20180101',freq='9H',periods=100)
df = pd.DataFrame(data=data,index=times,columns=columns)
dates = df.index.strftime('%Y%m%d').unique()
means = [daily_mean(df,date,'A') for date in dates]
解决方案
是的,您可以使用pd.Grouper
API。此外,这将保留 DataFrame,因此是双赢的。
means = df.groupby(pd.Grouper(freq='1D')).mean()
或者,您可以在日期时间索引的地板上进行分组。
means = df.groupby(df.index.floor('D')).mean()
means.head(10)
A
2018-01-01 0.412354
2018-01-02 0.301209
2018-01-03 0.710357
2018-01-04 0.158135
2018-01-05 0.720308
2018-01-06 0.281862
2018-01-07 0.489486
2018-01-08 0.287808
2018-01-09 0.463117
2018-01-10 0.512963
我更喜欢方法#1,因为pd.Grouper
它应该比在不相关的系列/数组上分组(如第二种形式)更有效。
推荐阅读
- apache-kafka - 将外部 kafka 集群连接到 Apache Atlas?
- java - 如何使命令 java -version 在装有 Windows 8.1 的计算机上运行?
- terraform - 如何使用 Terraform 和 aws_apigatewayv2_integration 设置 API Gateway Step Function 集成
- python - 有没有更短的方法可以创建这个列表?
- kubernetes - 使用 Bitnami WordPress helm chart,如何通过 FTP 连接 Filezilla?
- css - 是否可以取消所有 css 文件在 Wordpress 前端加载但保持后端加载 css 正常?
- spring-cloud-stream - SCDF 流设计和定制处理器
- ansible - 无法根据条件运行任务文件以避免ansible中的块循环
- github-actions - GitHub 操作 $GITHUB_WORKSPACE envar 为什么列出空目录?
- gcc - 当默认标准是 201402L (c++14) 时 g++ 与 g++ -std=c++14 有什么不同吗?