总结字典中的所有时间增量值
sum up all the time delta values in a dictionary
我有一本包含时间增量值的字典。
{1: Timedelta('0 days 01:44:39'),
2: Timedelta('0 days 02:34:01'),
3: Timedelta('0 days 00:49:15'),
4: Timedelta('0 days 01:13:26'),
5: Timedelta('0 days 00:38:14')}
我想总结所有值并显示总时间戳(添加所有时间戳)作为输出。知道如何实现这个要求吗?
我尝试将其转换为列表,然后使用 sum() 函数,但它们不适用于时间戳。
将字典转换为 Series
,因此可以使用 sum
的时间增量,默认情况下排除 None
、NaN
:
d = {1: pd.Timedelta('0 days 01:44:39'),
2: pd.Timedelta('0 days 02:34:01'),
3: pd.Timedelta('0 days 00:49:15'),
4: pd.Timedelta('0 days 01:13:26'),
5: pd.Timedelta('0 days 00:38:14')}
s = pd.Series(d)
print (s.sum())
0 days 06:59:35
您可以使用 functools.reduce
:
>>> from functools import reduce
>>> d = {1: pd.Timedelta('0 days 01:44:39'),
2: pd.Timedelta('0 days 02:34:01'),
3: pd.Timedelta('0 days 00:49:15'),
4: pd.Timedelta('0 days 01:13:26'),
5: pd.Timedelta('0 days 00:38:14')}
>>> reduce(lambda a,b: a+b, d.values())
#Timedelta('0 days 06:59:35')
sum(iterable, start)
iterable : iterable can be anything list , tuples or dictionaries ,
but most importantly it should be numbers.
start : this start is added to the sum of
numbers in the iterable.
从上面可以看出 sum
函数仅适用于 numbers
。
要使其与 timedeltas
一起使用,请使用 Python 的 datetime
模块。执行以下操作:
In [804]: d = {1: Timedelta('0 days 01:44:39'),
...: 2: Timedelta('0 days 02:34:01'),
...: 3: Timedelta('0 days 00:49:15'),
...: 4: Timedelta('0 days 01:13:26'),
...: 5: Timedelta('0 days 00:38:14')}
In [805]: import datetime
In [803]: sum(d.values(), datetime.timedelta())
Out[803]: Timedelta('0 days 06:59:35')
小数据集所有答案的时间表现:
@jezrael 的回答:
In [806]: def j():
...: s = pd.Series(d)
...: return s.sum()
...:
In [807]: %timeit j()
491 µs ± 86.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
@Pablo 的回答:
In [810]: %timeit reduce(lambda a,b: a+b, d.values())
22.7 µs ± 250 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@我的回答:
In [808]: %timeit sum(d.values(), datetime.timedelta())
31.9 µs ± 451 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
我有一本包含时间增量值的字典。
{1: Timedelta('0 days 01:44:39'),
2: Timedelta('0 days 02:34:01'),
3: Timedelta('0 days 00:49:15'),
4: Timedelta('0 days 01:13:26'),
5: Timedelta('0 days 00:38:14')}
我想总结所有值并显示总时间戳(添加所有时间戳)作为输出。知道如何实现这个要求吗?
我尝试将其转换为列表,然后使用 sum() 函数,但它们不适用于时间戳。
将字典转换为 Series
,因此可以使用 sum
的时间增量,默认情况下排除 None
、NaN
:
d = {1: pd.Timedelta('0 days 01:44:39'),
2: pd.Timedelta('0 days 02:34:01'),
3: pd.Timedelta('0 days 00:49:15'),
4: pd.Timedelta('0 days 01:13:26'),
5: pd.Timedelta('0 days 00:38:14')}
s = pd.Series(d)
print (s.sum())
0 days 06:59:35
您可以使用 functools.reduce
:
>>> from functools import reduce
>>> d = {1: pd.Timedelta('0 days 01:44:39'),
2: pd.Timedelta('0 days 02:34:01'),
3: pd.Timedelta('0 days 00:49:15'),
4: pd.Timedelta('0 days 01:13:26'),
5: pd.Timedelta('0 days 00:38:14')}
>>> reduce(lambda a,b: a+b, d.values())
#Timedelta('0 days 06:59:35')
sum(iterable, start)
iterable : iterable can be anything list , tuples or dictionaries , but most importantly it should be numbers.
start : this start is added to the sum of numbers in the iterable.
从上面可以看出 sum
函数仅适用于 numbers
。
要使其与 timedeltas
一起使用,请使用 Python 的 datetime
模块。执行以下操作:
In [804]: d = {1: Timedelta('0 days 01:44:39'),
...: 2: Timedelta('0 days 02:34:01'),
...: 3: Timedelta('0 days 00:49:15'),
...: 4: Timedelta('0 days 01:13:26'),
...: 5: Timedelta('0 days 00:38:14')}
In [805]: import datetime
In [803]: sum(d.values(), datetime.timedelta())
Out[803]: Timedelta('0 days 06:59:35')
小数据集所有答案的时间表现:
@jezrael 的回答:
In [806]: def j():
...: s = pd.Series(d)
...: return s.sum()
...:
In [807]: %timeit j()
491 µs ± 86.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
@Pablo 的回答:
In [810]: %timeit reduce(lambda a,b: a+b, d.values())
22.7 µs ± 250 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@我的回答:
In [808]: %timeit sum(d.values(), datetime.timedelta())
31.9 µs ± 451 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)