【问题标题】:Compute daily mean with pandas用 pandas 计算每日平均值
【发布时间】:2019-03-07 01:47:35
【问题描述】:

我有一个函数可以计算同一日期的熊猫数据框“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]

【问题讨论】:

    标签: python pandas datetime group-by pandas-groupby


    【解决方案1】:

    是的,您可以使用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 应该比在不相关的系列/数组上分组(如第二种形式)更有效。

    【讨论】:

      【解决方案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
      ...
      

      【讨论】:

      • 如果不指定key,默认会在索引上进行分组。很好的答案;)
      • 阿里加托,老师。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2021-11-08
      • 2023-03-06
      • 2020-06-04
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多