我目前正在努力使用pandas 0.8.0b1的重新排列功能。
例如,当我尝试将10分钟值(使用“均值”)汇总到月度值时,该函数似乎使用了下个月平均一个月的数据的最后一天......
以下是一个简单的3个月10分钟数据时间系列
的示例每月意味着我使用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
你可以帮我吗????这是一个错误???
答案 0 :(得分: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中解决了这个问题(以上两个参考问题都已关闭)