python - 用 Pandas 计算每日平均值

标签 python pandas datetime group-by pandas-groupby

我有一个函数可以计算 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 应该比在不相关的系列/数组上分组(如第二种形式)更有效。

关于python - 用 Pandas 计算每日平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52599774/

相关文章:

python - 将 JSON 字符串转换为 Python 字典

python - 如何识别 Django 中 url 中的 anchor ?

python - 绑定(bind)Python的OpenCV中,为什么不调用NumPy函数就可以使用?

python - 计算每列的统计数据并将其添加到空数据框

datetime - 如何获取 Meteor 今天的日期和时间?

android - DatePickeDialog 在 android 中显示多一个月

ruby-on-rails - 我如何判断一个对象是否是 Ruby 中的 "date-y"类型的对象(可转换为 unix 时间戳)

python - __enter__ 通常包含一个 try block 吗?

python - 根据条件提取列值

python - 在 for 循环中定义可变的列数