python – 为pandas中的不规则时间序列创建加权平均值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为pandas中的不规则时间序列创建加权平均值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1762字,纯文字阅读大概需要3分钟。
内容图文
![python – 为pandas中的不规则时间序列创建加权平均值](/upload/InfoBanner/zyjiaocheng/779/8efbac7971854910832df5c58348527e.jpg)
从具有可变时间步长的模拟数据我有一个不规则的时间向量作为我的值的索引,它们存储在pandas.DataFrame中.
让我们考虑一个简化的测试用例:
import pandas as pd
import datetime
time_vec = [datetime.time(0,0),datetime.time(0,0),datetime.time(0,5),datetime.time(0,7),datetime.time(0,10)]
df = pd.DataFrame([1,2,4,3,6],index = time_vec)
使用正常的df.mean()函数将得到答案3.2,只有当时间向量是等距的时才会出现这种情况.
我认为正确的结果是3.55,第一个时间步长(零秒长),平均值是1.5,对于第二个时间步,平均值是3(五分钟长)等,这导致:
1.5 * 0 + 3*5 + 3.5 * 2 + 4.5 * 3 = 35.5
结果平均为3.55(35.5 /(0 5 2 3)).
有没有一种有效的方法来做大熊猫?
这应该最终会产生类似的结果
df.resample('15M',how = 'This very Method I am looking for')
用等距时间向量创建平均值.
解决方法:
好吧,我想出了如何解决我的问题.我不知道,如果这是一个很好的解决方案,但它的确有效.
我通过datetime.datetime交换datetime.time来更改问题中的原始代码,否则它将无效(datetime.time-Objects没有方法total_seconds()).我还必须导入numpy才能使用numpy.average.
所以现在的代码是:
import datetime
import numpy as np
import pandas as pd
time_vec = [datetime.datetime(2007,1,1,0,0)
,datetime.datetime(2007,1,1,0,0)
,datetime.datetime(2007,1,1,0,5)
,datetime.datetime(2007,1,1,0,7)
,datetime.datetime(2007,1,1,0,10)]
df = pd.DataFrame([1,2,4,3,6],index = time_vec)
这个小功能解决了我的问题:
def time_based_weighted_mean(tv_df):
time_delta = [(x-y).total_seconds() for x,y in zip(df.index[1:],df.index[:-1])]
weights = [x+y for x,y in zip([0]+ time_delta,time_delta+[0])]
res = np.average(df[0],weights = weights)
return res
print time_based_weighted_mean(df[0])
我首先尝试使用pd.index.diff()来计算time_delta-Array,但这导致了一个numpy.datetime64系列,我不知道如何将它们转换为浮点数,因为np.average需要浮点数作为输入 – 重量类型.
我很感谢任何改进代码的建议.
内容总结
以上是互联网集市为您收集整理的python – 为pandas中的不规则时间序列创建加权平均值全部内容,希望文章能够帮你解决python – 为pandas中的不规则时间序列创建加权平均值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。