【问题标题】:How can i sum the time stamps of one day?我怎样才能总结一天的时间戳?
【发布时间】:2021-02-26 23:16:30
【问题描述】:

我正在使用熊猫。

我有以下数据集: dataset Image

这是一年的数据,包含每天发生的贸易交易的详细信息。 我想总结一天中发生交易的总分钟数。 例如,如果在2009-04-01,交易从9:30:50 开始并在15:45:10 结束,那么总分钟数是:

[(15-9)*60+(30+45]+(50+10)/60)

我无法通过重采样函数来做到这一点。

日期采用 DateTimeIndex 格式。 我是熊猫新手。

【问题讨论】:

  • 请将您的数据发布为文本,而不是图像 - 尝试从中创建一个minimal reproducible example(甚至不必是您的真实数据)。例如。在图像上,您的列 TIME 似乎是 dtype timedelta,而不是时间,正如您的问题所暗示的那样。什么是正确的?

标签: python pandas datetime time timedelta


【解决方案1】:

我认为您最好使用datetime 处理此事。

由于您在快照中将开始时间和结束时间作为字符串。你可以这样做:

import datetime

starttime = datetime.datetime.strptime('2009-04-01 9:30:50', '%Y-%m-%d %H:%M:%S')
endtime = datetime.datetime.strptime('2009-04-01 15:45:10', '%Y-%m-%d %H:%M:%S')
((endtime - starttime).seconds) / 60

【讨论】:

  • 我认为您所说的方法仅适用于两个特定时间。我如何将此方法应用于系列?我有一列时间戳
  • 您可以使用 groupby,正如 MrFuppes 所说。或者您可以迭代所有索引并找到每天的开始时间和结束时间。最好以代码的形式附上更多的示例。
【解决方案2】:

您可以按日期分组并使用numpy's ptp 来获取 timedeltas 的最大到最小差异:

import pandas as pd
import numpy as np

# from the question I assume your df looks like
df = pd.DataFrame({'DATE': ["2020-04-01", "2020-04-01", "2020-04-02", "2020-04-02"],
                   'TIME': ["9:30:50", "15:45:10", "8:30:50", "15:45:10"]})

df['DATE'] = pd.to_datetime(df['DATE'])
df['TIME'] = pd.to_timedelta(df['TIME'])

totalTimes = df.groupby('DATE')['TIME'].agg(np.ptp)
# DATE
# 2020-04-01   0 days 06:14:20
# 2020-04-02   0 days 07:14:20
# Name: TIME, dtype: timedelta64[ns]

如果你想要,例如总分钟数,您可以使用.total_seconds() 来计算它们,例如

totalTimes.loc['2020-04-01'].total_seconds()/60
# 374.3333333333333

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2015-09-10
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多