【发布时间】:2017-09-14 14:09:45
【问题描述】:
不得不承认这对我来说是一个美好的时刻:在花了这么多时间阅读论坛之后,我终于在 stackoverflow 中发布了一个问题。
拥有包含一天中完成的交易订单列表的 csv 文件,有时 1 秒内超过 100 行
data1
>CO1 Comdty A B C D
>2017-08-10 00:00:00 TRADE 52.70 1 NaN
>2017-08-10 00:00:00 TRADE 52.70 1 NaN
>2017-08-10 00:00:00 TRADE 52.70 1 NaN
>2017-08-10 00:00:00 TRADE 52.84 1 NaN
........................
>2017-08-10 00:00:02 TRADE 52.90 1 NaN
>2017-08-10 00:00:02 TRADE 52.92 1 NaN
Index 是一个 Datetime 对象,如下所示:
DatetimeIndex(['2017-08-10 00:00:00', '2017-08-10 00:00:00',
'2017-08-10 00:00:00', '2017-08-10 00:00:00',
'2017-08-10 00:00:00', '2017-08-10 00:00:00',
'2017-08-10 00:00:00', '2017-08-10 00:00:00',
'2017-08-10 00:00:00', '2017-08-10 00:00:00',
...
'2017-08-21 23:58:00', '2017-08-21 23:58:00',
'2017-08-21 23:58:00', '2017-08-21 23:58:00',
'2017-08-21 23:58:00', '2017-08-21 23:58:00',
'2017-08-21 23:58:00', '2017-08-21 23:58:00',
'2017-08-21 23:58:00', '2017-08-21 23:58:00'],
dtype='datetime64[ns]', name=u'CO1 Comdty', length=1005276, freq=None)
我使用 groupby 函数来获取每秒的平均值
dataG1 = data1.groupby([data1.index.month,data1.index.day,data1.index.hour,data1.index.minute,data1.index.second])['B'].mean()
结果是给我一个 MultiIndex Serie,在 Second 0 时按分钟分组
8 10 0 0 0 52.702941
1 0 52.700000
2 0 52.704333
3 0 52.690000
4 0 52.689691
5 0 52.690000
7 0 52.700000
8 0 52.700000
9 0 52.704444
10 0 52.710652
....................
所以你可以看到最后一列的价格是每分钟(和秒 0)给出的,我想要平均每一秒! (列是月/日/时/分/秒)
当我尝试按月、日、小时和分钟分组时,它计算正确。
在任何地方都找不到解决方案,有人可以帮忙吗?
谢谢!
回答 Parfait 的 cmets :
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++
是的,您可以通过以下链接下载 csv 文件:
data1 = pd.read_csv('data1.csv',sep=',', parse_dates=[0], index_col=0,infer_datetime_format=True)
dataG1 = data1.groupby([data1.index.month,data1.index.day,data1.index.hour, data1.index.minute,data1.index.second])['B'].mean()
dataG1
那么您应该会看到相同的结果。
再次感谢!
【问题讨论】:
-
您的索引看起来全为零秒且有遗漏。如果没有完整的reproducible example,我们将无法提供更多帮助。
-
谢谢,我在原始消息中添加了一个链接以下载 csv 文件。