gpt4 book ai didi

Python根据日期时间索引计算每天的小时数

转载 作者:行者123 更新时间:2023-12-01 00:09:05 24 4
gpt4 key购买 nike

从下面的 dataframe 中,我想计算每一天的小时数。每条记录重 5 分钟。 DateTime 是 TZ 感知的。

Year    data
Timestamp
2008-11-13 16:50:00+09:30 177.83
2008-11-13 16:55:00+09:30 165.73
2008-11-15 17:00:00+09:30 160.34
2008-11-15 17:15:00+09:30 148.90
2008-11-15 17:40:00+09:30 113.66
2008-11-20 17:15:00+09:30 121.12
2008-11-20 17:20:00+09:30 109.55
2008-11-20 17:35:00+09:30 100.86
2008-11-20 17:50:00+09:30 90.72
2008-11-20 07:55:00+09:30 86.27

预期结果是

Year    hrs/day
Timestamp
2008-11-13 00:00:00+09:30 0.16666666666666666 # <-- 10 min / 60
2008-11-15 00:00:00+09:30 0.25 # <-- 15 min / 60
2008-11-20 00:00:00+09:30 0.4166666666666667 # <-- 15 min / 60

这就是我所做的。

df['Hour'] = df.index.hour.astype(int)
days = df.resample('D').apply({'Hour':'count'})

这给了我一个“小时”列,其值是每天的记录数。

下一步...

days['Hr/dy'] = (days['Hour'] * 5.0)/60.0

其中“5.0”是时间戳间隔。通过这种方式,我可以得到预期的结果。

但是,我必须在具有不同时间戳间隔的许多数据帧之间进行切换。每次切换到新数据时都一一提供间隔并不方便。我需要从时间戳索引自动获取时间戳间隔。

freqdays = pd.infer_freq(df.index[0:10])给出一个非整数时间戳频率('5T'),它不可用于数学运算来进一步获取小时数。

我需要的是:
- 从时间戳索引中获取整数或浮点频率(间隔)的方法,或
- 直接从时间戳索引计算每天的小时长度。

编辑:
原始数据有5分钟的间隔,有很多缺失的记录。每天的开始和结束时间都不同。

最佳答案

您可以尝试使用以下方法获取索引中以秒为单位的最小差异:

print (df.index.to_series(keep_tz=True).sort_values().diff().min().total_seconds())
300.0

因此,要获得结果,请每天进行分组,乘以索引的最小差异,然后除以 3600 以获得小时数:

df_agg = df.groupby(df.index.date).count()\
*df.index.to_series(keep_tz=True).sort_values().diff().min().total_seconds()/3600
print (df_agg)

date
2008-11-13 0.166667
2008-11-15 0.250000
2008-11-20 0.416667

关于Python根据日期时间索引计算每天的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59756825/

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