pandas groupby - 维度错误

时间:2014-12-13 18:30:31

标签: python pandas

我有一个包含温度信息的文件,如下所示:

DateTime,Temperature
2014-11-12-12:43:12,24
2014-12-12-13:45:12,10
2014-12-12-13:46:12,20
2014-12-13-05:47:13,24
2014-12-13-05:48:13,20
2014-12-13-06:49:13,24  

我想使用pandas来平均温度,按小时,天,月分组并将结果保存在另一个文件中。像这样:

Month,Day,Hour,AverageTemperature
11,12,12,24
12,12,13,15
12,13,05,22
12,13,06,22

我试过这段代码:

df = pd.read_csv("datatemp.dat", parse_dates='DateTime', index_col=0, sep=",")
month_day_hour_means = df.groupby(lambda x: (x.hour, x.month)).mean()
print df

,不幸的是我收到了这个错误:

ValueError: Buffer has wrong number of dimensions (expected 1, got 2)

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

你的代码在Pandas版本0.15.1中运行良好。

In [74]: df.groupby(lambda x: (x.hour, x.month)).mean()
Out[74]: 
          Temperature
(5, 12)            22
(6, 12)            24
(12, 11)           24
(13, 12)           15

但是,您可以使用以下内容,作为额外的奖励,可以更快:

In [73]: df.groupby([df.index.hour, df.index.month]).mean()
Out[73]: 
       Temperature
5  12           22
6  12           24
12 11           24
13 12           15

df.index中的每个项目调用lambda函数一次。 相反,df.index.hourdf.index.month会生成所需的值 使用快速的Cythonized函数。


result = df.groupby([df.index.hour, df.index.day, df.index.month]).mean().reset_index()
result.columns = ['Hour', 'Day', 'Month', 'AverageTemperature']

result[['Month', 'Day', 'Hour', 'AverageTemperature']]

产量

   Month  Day  Hour  AverageTemperature
0     12   13     5                  22
1     12   13     6                  24
2     11   12    12                  24
3     12   12    13                  15