首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中计算relativedelta的平均值

在python中计算relativedelta的平均值
EN

Stack Overflow用户
提问于 2018-01-26 05:49:27
回答 1查看 630关注 0票数 0

我在Python3中有多个relativedelta值,我想取所有这些值的平均值。例如,对于下面的两个值,我想要一个relativedelta值,其中小时= +3天(两者之间的平均值)。

代码语言:javascript
复制
relativedelta(days=+2, hours=+1, minutes=+33, seconds=+51)
relativedelta(hours=+4, minutes=+35, seconds=+36)

如何计算列表之间的平均值?如果有一种方法可以获得每个值的总小时数,我可以将它们相加并除以值的数量,然后除以24得到天数?

EN

回答 1

Stack Overflow用户

发布于 2018-01-26 06:04:15

dateutil中无法直接做到这一点。相反,您可以将两者都锚定到datetime,并在锚定的日期之间找到一个timedelta。下面的数字以天为单位,源于一天中有86,400秒:

代码语言:javascript
复制
from dateutil.relativedelta import relativedelta
from datetime import datetime      
from statistics import mean

def avg_relativedelta(*relativedeltas):
    dates = (anchor - rd for rd in relativedeltas)
    tds = (anchor - date for date in dates)
    return mean(td.total_seconds() for td in tds) / 86400

i1 = relativedelta(days=2, hours=1, minutes=33, seconds=51)
i2 = relativedelta(hours=4, minutes=35, seconds=36)
i3 = relativedelta(days=6, minutes=10)

avg_relativedelta(i1, i2, i3)
# 2.7545023148148147

avg_relativedelta(i1, i2)
# 1.12828125

您需要从datetime中减去relativedelta,然后从相同的datetime中减去此datetime,这有点不直观。但从根本上说,这是一种将relativedelta转换为timedelta的方法,后者能够聚合其单元。

或者:

代码语言:javascript
复制
def total_days_in_relativedelta(reldelta):
    total_days = reldelta.years * 365 \
               + reldelta.months * 12 \
               + reldelta.weeks * 52 \
               + reldelta.days \
               + reldelta.minutes * 1440 \
               + reldelta.seconds * 86400 \
               + reldelta.microseconds * 1000000
    return total_days


def avg_relativedelta(*relativedeltas):
    return mean(total_days_in_relativedelta(rd) for rd in relativedeltas)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48452449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档