【发布时间】:2015-07-29 07:16:20
【问题描述】:
我正在尝试在名为 ave_data 的 DataFrame 中获取以下时间的平均值(如下所示):
- 早上 5 点到 9 点(4 小时)
- 上午 9 点到下午 6 点(9 小时)
- 下午 6 点到晚上 10 点(4 小时)
- 晚上 10 点到早上 5 点(7 小时)
目前我的 'ave_data' DataFrame 输出以下数据(请忽略所有破折号,它们仅用于对齐数据):
时间 ---------- F1 ------------- F2 --------- --- F3
2082-05-03 00:00:00 --- 43.005593 --- -56.509746 --- 25.271271
2082-05-03 01:00:00 --- 55.114918 --- -59.173852 --- 31.849262
2082-05-03 02:00:00 --- 63.990762 --- -64.699492 --- 52.426017
2082-05-03 03:00:00 --- 56.508333 --- -65.489083 --- 36.188083
2082-05-03 04:00:00 --- 36.217295 --- -59.198033 --- 2.404426
2082-05-03 05:00:00 --- 36.153814 --- -62.156187 --- 24.779830
2082-05-03 06:00:00 --- 93.920334 --- -57.923000 --- 77.654250
...
我想将这些新平均值保存为一个新的 DataFrame,如下所示(以下数字仅为随机示例):
时间 -------- F1 ------------- F2 ------------ - F3
早上(5AM-9AM) --- 50.005987 --- -60.509746 --- 29.311271
日(上午 9 点至下午 6 点)-------- 59.005987 --- -49.509746 --- 98.311271
晚上(6PM-10PM) -- 55.018887 --- -47.614622 --- 29.311271
晚上 (10PM-5AM) ---- 55.018887 --- -47.614622 --- 29.311271
另外,理想情况下,我希望添加最后一列,其中包含每行的平均值。该代码将用于读取不同的文件,这些文件将生成与下面显示的列数不同的列,因此,如果有人可以帮助我为此开发一种通用方法,那就太好了。
以下是我拥有的代码的相关部分:
raw_data = pd.read_excel(r'/Users/linnkloster/Desktop/Results/01_05_2012 Raw Results.xls', skiprows=1, header=0, nrows=1440, dayfirst=True, infer_datetime_format='%d/%m/%Y %H')
raw_data[u'Time']= pd.to_datetime(raw_data['Time'], unit='d')
# Converts first column to datetime, to make averaging easier
# Note this gets the wrong date (2082-05-03) but correct hour
raw_data.set_index(pd.DatetimeIndex(raw_data[u'Time']), inplace=True)
ave_data=raw_data.resample('h', how='mean')
print ave_data
【问题讨论】:
-
您能否上传您的示例 xls 文件(例如,通过 Dropbox 共享链接或谷歌驱动程序)?对于盘中时段的抽样,有几个选项可供选择:
.indexer_between_time或pd.cut表示午夜过后多少小时 (timedelta)。 -
实际数据有点敏感,因为我有一个可行的解决方案,所以这次我不会上传它。谢谢你的好建议
标签: python arrays datetime pandas average