我目前正在努力使用 pandas 0.8.0b1 的重采样功能。
例如,当我尝试将 10 分钟值聚合(使用“平均值”)为每月值时,该函数似乎使用一个月最后一天的数据作为下个月的平均值...
这是一个包含 3 个月 10 分钟数据的简单时间序列的示例
- 2012 年 1 月:所有值 = 1
- 2012 年 2 月:所有值 = 2
- 2012 年 3 月:所有值 = 3
我使用 df.resample('M',how='mean') 得到的每月平均值是:
Out[454]:
0
2012-01-31 1.000000
2012-02-29 1.965757
2012-03-31 2.967966
2012-04-30 3.000000
但我想要得到类似的东西:
0
2012-02-01 1.000000
2012-03-01 2.000000
2012-04-01 3.000000
这是代码:
january = pd.date_range(pd.datetime(2012,1,1),pd.datetime(2012,1,31,23,50),freq='10min')
february = pd.date_range(pd.datetime(2012,2,1),pd.datetime(2012,2,29,23,50),freq='10min')
march = pd.date_range(pd.datetime(2012,3,1),pd.datetime(2012,3,31,23,50),freq='10min')
data_jan = np.zeros(size(january))+1
data_feb = np.zeros(size(february))+2
data_march = np.zeros(size(march))+3
df1 = pd.DataFrame(data_jan,index=january)
df2 = pd.DataFrame(data_feb,index=february)
df3 = pd.DataFrame(data_march,index=march)
df = pd.concat([df1,df2,df3])
df.resample('M',how='mean')
如果现在,我通过以下方式删除最后一天:
january = pd.date_range(pd.datetime(2012,1,1),pd.datetime(2012,1,31,00,00),freq='10min')
february = pd.date_range(pd.datetime(2012,2,1),pd.datetime(2012,2,29,00,00),freq='10min')
march = pd.date_range(pd.datetime(2012,3,1),pd.datetime(2012,3,31,00,00),freq='10min')
我(几乎)得到了我想要的:
Out[474]:
0
2012-01-31 1
2012-02-29 2
2012-03-31 3
你能帮我吗???这是一个错误吗???
最佳答案
这确实是一个错误,我有两个问题:
https://github.com/pydata/pandas/issues/1458
https://github.com/pydata/pandas/issues/1471
这应该在 pandas 0.8.0 发布之前修复。请注意,这可以正常工作:
In [15]: df.resample('M', kind='period')
Out[15]:
0
Jan-2012 1
Feb-2012 2
Mar-2012 3
编辑:刚刚在 git master 中修复了这个问题(上述两个引用问题都已关闭)
关于python - pandas 0.8 重采样中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018120/