我有几年以下格式的小时数据框:
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')
不幸的是,这不起作用。有人可以帮助我如何将年,季,月和日作为不同的参数来计算方法吗?
答案 0 :(得分:4)
我认为你要找的是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()
和(就像马蒂约翰的回答一样)你打电话给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()