4

我有一个简单的 pandas 数据框,它在不同时间进行了测量:

                     volume
t
2013-10-13 02:45:00      17
2013-10-13 05:40:00      38
2013-10-13 09:30:00      29
2013-10-13 11:40:00      25
2013-10-13 12:50:00      11
2013-10-13 15:00:00      17
2013-10-13 17:10:00      15
2013-10-13 18:20:00      12
2013-10-13 20:30:00      20
2013-10-14 03:45:00       9
2013-10-14 06:40:00      30
2013-10-14 09:40:00      43
2013-10-14 11:05:00      10

我正在做一些基本的重新采样和绘图,例如每日总音量,效果很好:

df.resample('D',how='sum').head()   

            volume
t
2013-10-13     184
2013-10-14     209
2013-10-15     197
2013-10-16     309
2013-10-17     317

但是由于某种原因,当我尝试计算每天的条目总数时,它返回一个多索引系列而不是数据框:

df.resample('D',how='count').head()

2013-10-13  volume     9
2013-10-14  volume     9
2013-10-15  volume     7
2013-10-16  volume     9
2013-10-17  volume    10

我可以修复数据,因此可以通过简单的 unstack 调用轻松绘制它df.resample('D',how='count').unstack(),但为什么调用 resample withhow='count'的行为与 with 不同how='sum'

4

1 回答 1

6

就结果数据帧的结构而言,它确实出现resamplecount导致了一些奇怪的行为(嗯,至少高达 0.13.1)。请参阅此处以获取稍微不同但相关的上下文:使用 mutli-ndex 进行计数和重新采样

您可以在此处使用相同的策略:

>>> df
                     volume
date                       
2013-10-13 02:45:00      17
2013-10-13 05:40:00      38
2013-10-13 09:30:00      29
2013-10-13 11:40:00      25
2013-10-13 12:50:00      11
2013-10-13 15:00:00      17
2013-10-13 17:10:00      15
2013-10-13 18:20:00      12
2013-10-13 20:30:00      20
2013-10-14 03:45:00       9
2013-10-14 06:40:00      30
2013-10-14 09:40:00      43
2013-10-14 11:05:00      10

所以这是你的问题:

>>> df.resample('D',how='count')

2013-10-13  volume    9
2013-10-14  volume    4

您可以通过在调用中指定count应用于volume带有 dict 的列来解决此问题resample

>>> df.resample('D',how={'volume':'count'})

            volume
date              
2013-10-13       9
2013-10-14       4
于 2014-05-16T05:14:30.263 回答