2014-12-13 5 views
0

나는이 같은 온도에 대한 정보가있는 파일이 : 나는 시간, 일, 월별 온도 및 그룹 평균과 저장 팬더를 사용하고자하는팬더는 GROUPBY - 차원의 잘못된 번호는

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 

을 결과는 다른 파일에 있습니다. 이런 식으로 뭔가 :

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) 

이 하나가 나를 도울 수를이 코드를 시도

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

?

답변

1

코드가 Pandas 버전 0.15.1에서 잘 작동합니다. 람다 함수는 df.index의 각 항목에 대해 한 번이라고

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 

:

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 

그러나, 대신 추가 보너스로, 더 빨리, 다음을 사용할 수 있습니다. 대조적으로 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 
+0

df.groupby가 ([df.index.hour, df.index.month가). 평균()는 잘 작동한다. 고마워. – user1680012