Python Pandas groupby 函数,具有每月、每小时的动态参数

标签 python function pandas time-series dataframe

几年来,我有以下格式的每小时数据框:

Date/Time            Value
01.03.2010 00:00:00  60
01.03.2010 01:00:00  50
01.03.2010 02:00:00  52
01.03.2010 03:00:00  49
.
.
.
31.12.2013 23:00:00  77

我使用以下代码获取数据中每年每小时的平均值:

In [11]: year_hour_means = df1.groupby(lambda x: (x.year, x.hour)).mean()
In [12]: year_hour_means
Out[12]:
           Value
(2010, 0)     60
(2010, 1)     50
(2010, 2)     52
(2010, 3)     49

现在我想将该代码放入一个函数中,这样我就可以动态选择按季度、年或月对小时进行分组,并且还可以针对数据框的特定日期范围执行此操作。

我写了下面的函数:

def datameans(df, avggrouper1, avggrouper2, startdate, enddate):  
    import pandas as pd
    df_hour_means = df[startdate:enddate]      
    df_hour_means = df_hour_means.groupby(lambda x: (avggrouper1, avggrouper2)).mean()  
    print df_hour_means.to_string()
    df_hour_means.plot()
    pass

我是这样调用函数的

datameans(dataframe, 'x.quarter', 'x.hour' , '2010-01-01 00:00:00', '2012-12-31 23:00:00')

不幸的是,这不起作用。有人可以帮助我如何将年、季度、月和日作为不同的参数来计算均值吗?

最佳答案

我想你要找的是getattr :

def datameans(df, avggrouper1, avggrouper2, startdate, enddate):  
    df_hour_means = df[startdate:enddate]      
    df_hour_means = df_hour_means.groupby(
        lambda x: (getattr(x,avggrouper1), getattr(x,avggrouper2))).mean()  
    print df_hour_means.to_string()
    df_hour_means.plot()

并且(如 Matti John 的回答)您将调用 datameans

datameans(dataframe, 'quarter', 'hour' , '2010-01-01 00:00:00', '2012-12-31 23:00:00')

或者,使用 operator.attrgetter :

import operator
keyfunc = operator.attrgetter(avggrouper1, avggrouper2)
df_hour_means = df_hour_means.groupby(keyfunc).mean()  

关于Python Pandas groupby 函数,具有每月、每小时的动态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319283/

相关文章:

JavaScript TypeError,无法读取未定义的属性,但函数已定义。我究竟做错了什么?

Python 方法采用一个位置参数,但给出了两个

python - 仅获取最低值的重复列

python - 为什么我的函数只能看到我的一些全局变量?

python - 是否有适用于Python/或C的多格式文档阅读库?

python - 收集有关基本抛硬币猜测程序未按预期运行的用户输入的功能

python - 从文本文档中查找单词并删除数据框中的相应行 - python

python - 如何使用 pandas 转置列的某些行

python - Pyro 信号安全吗?

python - 将 Mysql 时间戳转换为 Python 的日期时间