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

时间:2013-11-02 19:00:35

标签: 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

我正在进行一些基本的重新取样和绘图,例如每日总量,这可以正常工作:

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

我可以修复数据,以便通过简单的无堆栈调用轻松绘制,即df.resample('D',how='count').unstack(),但为什么调用带有how='count'的重新采样与how='sum'的行为不同?

1 个答案:

答案 0 :(得分:6)

看起来resamplecount会导致一些奇怪的行为导致结果数据帧的结构(嗯,至少高达0.13.1)。请参阅此处,了解略有不同但相关的背景:Count and Resampling with a 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来电中使用dict指定volume适用于resample列来解决此问题:

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

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