我有一个函数,可以计算同一日期的熊猫数据框的“ 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]
答案 0 :(得分:4)
是的,您可以使用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
比对不相关的序列/数组进行分组要有效(如第二种形式)。
答案 1 :(得分:2)
您可以这样做:
df.reset_index().groupby(pd.Grouper(key='index', freq='D'))['A'].mean()
index
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
...