我有一个包含温度信息的文件,如下所示:
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)
任何人都可以帮助我吗?
答案 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.hour
和df.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