重新采样'how = count'导致问题

mou*_*hio 4 python pandas

我有一个简单的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
Run Code Online (Sandbox Code Playgroud)

我正在做一些基本的重新采样和绘图,例如每日总量,它工作正常:

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
Run Code Online (Sandbox Code Playgroud)

但出于某些原因,当我尝试每天输入总数时,它会返回一个多索引系列而不是数据帧:

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
Run Code Online (Sandbox Code Playgroud)

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

Kar*_* D. 6

它确实出现resamplecount导致一些奇怪的行为就结果数据帧的结构而言(嗯,至少高达0.13.1).请参阅此处了解略有不同但相关的背景:使用多重索引进行计数和重新采样

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

>>> 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
Run Code Online (Sandbox Code Playgroud)

所以这是你的问题:

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

2013-10-13  volume    9
2013-10-14  volume    4
Run Code Online (Sandbox Code Playgroud)

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

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

            volume
date              
2013-10-13       9
2013-10-14       4
Run Code Online (Sandbox Code Playgroud)