【发布时间】:2015-08-03 09:33:13
【问题描述】:
我目前有以下两个DataFrame:
raw_data=
Time F1 F2 F3
2082-05-03 00:00:59.961599999 -83.769997 29.430000 29.400000
2082-05-03 00:02:00.009600000 -84.209999 28.940001 28.870001
2082-05-03 00:02:59.971200000 -84.339996 28.280001 28.320000
outage_by_timeofday_num =(由 raw_data 制成)(忽略破折号 - 它们仅用于对齐)
F1 F2 F3
Time
2082-05-03 00:00:00 0 1 1
2082-05-03 01:00:00 0 1 1
我已经能够使用以下代码(如下)按一天中的时间对 raw_data 数据帧进行排序和平均,但我无法对 outage_by_timeofday_num 数据帧执行相同的操作:
这行得通:
raw_data = pd.read_excel(r'/Users/linnk ....
raw_data[u'Time']= pd.to_datetime(raw_data['Time'], unit='d')
raw_data.set_index(pd.DatetimeIndex(raw_data[u'Time']), inplace=True)
raw_data.Time = pd.to_datetime(raw_data.Time)
def time_cat(t):
hour = t.hour
if(hour >= 5 and hour < 9):
return 'Morning (5AM-9AM)'
elif(hour >= 9 and hour < 18):
return 'Day (9AM-6PM)'
elif(hour >= 18 and hour < 22):
return 'Evening (6PM-10PM)'
else:
return 'Night (10PM-5AM)'
by_timeofday = raw_data.groupby(raw_data.Time.apply(time_cat)).mean()
by_timeofday 的输出是:
F1 F2 F3
Time
Day (9AM-6PM) -47.301852 23.070963 22.981000
Evening (6PM-10PM) -50.033000 24.011667 23.921833
Morning (5AM-9AM) -62.481130 48.417866 48.537197
Night (10PM-5AM) -71.372613 -71.289763 53.957411 \
但这不起作用:
outage_by_hour_num.Time= pd.to_datetime(outage_by_hour_num.Time)
outage_by_timeofday = outage_by_hour_num.groupby(outage_by_hour_num.Time.apply(time_cat)).sum(axis=1, numeric_only=True)
这给出了错误:AttributeError: 'DataFrame' object has no attribute 'Time'
有人可以帮助我发现我的错误/我需要进行的编辑,以对我的 outage_by_timeofday_num 数据帧进行排序,就像我对 raw_data 进行排序一样? 如果它可能有用,outage_by_timeofday_num 已按以下方式制作:
ave_data = raw_data.resample('h', how='mean')
ave_data.index.name=u'Time'
summary_ave_data = ave_data.copy()
summary_ave_data['Hourly Substation Average'] = summary_ave_data.mean(numeric_only=True, axis=1)
outage_by_hour = summary_ave_data >= 0.05
outage_by_hour_num= outage_by_hour.astype(int)
【问题讨论】:
标签: python datetime pandas dataframe average