【问题标题】:Python Pandas groupby function with dynamic parameters for monthly, hourly meansPython Pandas groupby 函数,具有每月、每小时均值的动态参数
【发布时间】:2013-06-23 13:05:51
【问题描述】:

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

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')

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

【问题讨论】:

    标签: python function pandas time-series dataframe


    【解决方案1】:

    我想你要找的是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()  
    

    【讨论】:

    • 太棒了!非常感谢你们俩。有了这个,它就可以完美地工作了。
    猜你喜欢
    • 2017-11-12
    • 2023-03-06
    • 2018-11-15
    • 2015-06-28
    • 1970-01-01
    • 2021-01-30
    • 2020-03-09
    • 2016-01-25
    • 1970-01-01
    相关资源
    最近更新 更多