我有一个简单的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'
的行为不同?
答案 0 :(得分:6)
看起来resample
和count
会导致一些奇怪的行为导致结果数据帧的结构(嗯,至少高达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