首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python从datetime索引中计算每天的小时数。

Python从datetime索引中计算每天的小时数。
EN

Stack Overflow用户
提问于 2020-01-15 17:36:55
回答 1查看 2K关注 0票数 1

在下面的dataframe中,我想计算一下每一天的小时数。每项记录重5分钟。DateTime意识到了TZ.

代码语言:javascript
运行
复制
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

预期结果是

代码语言:javascript
运行
复制
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

我就是这么做的。

代码语言:javascript
运行
复制
df['Hour'] = df.index.hour.astype(int)
days = df.resample('D').apply({'Hour':'count'})

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

下一个..。

代码语言:javascript
运行
复制
days['Hr/dy'] = (days['Hour'] * 5.0)/60.0

其中'5.0‘是时间戳间隔。这样,我就能得到预期的结果。

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

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

我需要的要么是:

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

编辑

原始数据间隔5分钟,有许多记录丢失。每天的开始和结束时间是不同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 17:53:50

您可以尝试获得索引中以秒为单位的最小差值:

代码语言:javascript
运行
复制
print (df.index.to_series(keep_tz=True).sort_values().diff().min().total_seconds())
300.0

因此,为了得到你的结果,每天做一组,乘以指数的最小差,然后除以3600得到小时:

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59756825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档