【问题标题】:How do I find the average time?我如何找到平均时间?
【发布时间】:2017-10-02 08:52:07
【问题描述】:

我目前正在从事此项目,但在根据相应类型查找平均时间时遇到了一些问题。现在,在阅读我的 CSV 文件后,我的输出如下所示。

#Following this format (x typeList : timeTakenList)

0 Lift : 5 days, 5:39:00
1 Lift : 5 days, 5:31:00
2 lighting : 3 days, 9:47:00
3 ACMV : 5 days, 5:21:00
4 lighting : 3 days, 9:32:00
.
.
.

如何计算每种类型所花费的平均时间,以便获得以下输出?

0 Lift : (5 days, 5:31:00 + 5 days, 5:39:00) / 2
1 lighting : (3 days, 9:47:00 + 3 days, 9:32:00) / 2
2 ACMV : 5 days, 5:21:00
.
.
.

timeTakenList 的计算方法是从 CompletedDate 列中减去另一列 Acknowledged Date。

timeTakenList = completedDate - acknowledgedDate

typeList 中有很多其他类型,我试图避免执行 if 语句,例如 if typeList[x] == "Lift",然后将时间加在一起,等等。

.csv 文件示例:

我不太确定还有什么方法可以让我的问题更清楚,但非常感谢任何帮助。

【问题讨论】:

  • typeList 是否包含字符串,例如 ["0 Lighting", "1 Lighting"...]
  • 第一部分:从timeTakenList获取值并将它们转换为小时。
  • @Harry nope,typeList 只是 [Lighting, Lighting, Air-Con, ...] 之前的数字只是为了方便参考我的 .csv 文件。
  • 请以原始格式举例说明您的 CSV 文件。
  • @MartinEvans 我已经包含了 .csv 文件的一部分以供参考。希望这就是你的意思。

标签: python python-2.7 csv


【解决方案1】:

检查以下实现。

import re

typeList = ["Lighting", "Lighting", "Air-Con", "Air-Con", "Toilet"]

timeTakenList = ["10hours", "5hours", "2days, 5hrs", "5hours", "4hours"]

def convertTime(total_time):
    li = list(map(int,re.sub(r"days|hrs|hours","",total_time).split(",")))
    if len(li) == 2:
        return li[0] * 24 + li[1]
        return li[0]

def convertDays(total_time):
    days = int(total_time / 24)
    hours = total_time % 24
    if (hours).is_integer():
        hours = int(hours)
    if days == 0:
        return str(hours) + "hours"
    return str(days) + "days, " + str(hours) + "hrs"

def avg(numbers):
    av = float(sum(numbers)) / max(len(numbers), 1)
return av 

avgTime = {}

for i, types in enumerate(typeList):
    if avgTime.has_key(types):
        avgTime[types].append(convertTime(timeTakenList[i]))
    else:
        avgTime[types] = [convertTime(timeTakenList[i])]

for types in avgTime.keys():
    print types + " : " + convertDays(avg(avgTime[types]))

算法

  • 从 timeTakenList 列表中转换条带“小时”、“小时”、“天”。
  • 将由天和小时组成的元素转换为小时 更简单的平均计算
  • 创建以 typeList 元素为键的散列并转换 timeTakenList 元素作为值列表
  • 打印转换回天和小时的每个键的值。

【讨论】:

  • 不做任何解释就直接丢代码对以后的读者帮助不大。
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
相关资源
最近更新 更多