gpt4 book ai didi

python - 在计算行值时按日期对列表进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:28 25 4
gpt4 key购买 nike

这是我的数据格式:

Date hits returning
2014/02/06 10 0
2014/02/06 25 0
2014/02/07 11 0
2014/02/07 31 1
2014/02/07 3 2
2014/02/08 6 0
2014/02/08 4 3
2014/02/08 17 0
2014/02/08 1 0
2014/02/09 6 0
2014/02/09 8 1

所需的输出是:

date, sum_hits, sum_returning, sum_total
2014/02/06 35 0 35
2014/02/07 44 3 47
2014/02/08 28 3 31
2014/02/09 14 1 15

输出用于使用 Google Charts

为了获取唯一日期并计算每行的值,我正在创建一个字典并使用日期具有键,例如:

# hits = <object with the input data>
data = {}
for h in hits:
day = h.day_hour.strftime('%Y/%m/%d')
if day in data:
t_hits = int(data[day][0] + h.hits)
t_returning = int(data[day][1] + h.returning)
data[day] = [t_hits, t_returning, t_hits + t_returning]
else:
data[day] = [
h.hits,
h.returning,
int(h.hits + h.returning)]

这会创建类似的内容:

{
'2014/02/06' = [35 0 35],
'2014/02/07' = [44 3 47],
'2014/02/08' = [28 3 31],
'2014/02/09' = [14 1 15]
}

为了创建所需的输出,我正在这样做:

array()
for k, v in data.items():
row = [k]
row.extend(v)
array.append(row)

它创建一个具有所需格式的数组:

[
[2014/02/06, 35, 0, 35],
[2014/02/07, 44, 3, 47],
[2014/02/08, 28, 3, 31],
[2014/02/09, 14, 1, 15],
]

所以我的问题基本上是,是否有更好的方法来做到这一点,或者一些Python内部命令可以允许我在计算行值时按行字段进行分组。

最佳答案

如果您的输入始终已排序(或者您可以对其进行排序),则可以使用 itertools.groupby简化其中一些。 groupby,顾名思义,按键对输入元素进行分组,并为您提供一个可迭代的 (group_key, list_of_values_in_group)。像下面这样的东西应该有效:

import itertools

# the keyfunc extracts the key from each input element
keyfunc = lambda row: row.day_hour.strftime("%Y/%m/%d")

data = []
for day, day_rows in itertools.groupby(hits, key=keyfunc):
sum_hits = 0
sum_returning = 0
for row in day_rows:
sum_hits += int(row.hits)
sum_returning += int(row.returning)
data.append([day, sum_hits, sum_returning, sum_hits + sum_returning])

# data now contains your desired output

关于python - 在计算行值时按日期对列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21853059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com