当前位置: 首页 > 知识库问答 >
问题:

Python函数,用于从一堆日期中创建每小时的时间序列

王念
2023-03-14

我有以下形式的数据:

         org    area   date        sales
         abc    NY     01/06/2020   120
         abc    NY     01/13/2020   220
         abc    NY     01/20/2020   210
         ...
         abc    NY     07/20/2020   123
         xyz    OR     01/06/2020   121
         xyz    OR     01/13/2020   200
         ...
         xyz    OR     07/20/2020   223

等等...

我想从中创建一个小时时间序列,例如

         org    area   date        hour     sales
         abc    NY     01/06/2020   0        120
         abc    NY     01/06/2020   1        120
         abc    NY     01/06/2020   2        120 
         abc    NY     01/06/2020   3        120  
         abc    NY     01/06/2020   4        120
         abc    NY     01/06/2020   5        120
         ....
         abc    NY     01/06/2020   23       120
         abc    NY     01/07/2020   0        120
         abc    NY     01/07/2020   1        120
         ...
         abc    NY     07/20/2020   23       111
         xyz    OR     01/06/2020   1        120
         xyz    OR     01/06/2020   2        120
         ...
         xyz    OR     07/20/2020   23        120

等等...

我需要在2020年6月1日至2020年7月20日期间为几个组织和区域组执行此操作

我尝试了代码a.set_index('date')。groupby('org','area')。重新采样('W',how='sum'),但看起来我做错了

共有1个答案

陈马鲁
2023-03-14

找到每个组织和区域的最小值和最大值,创建一个空数据框,并将其合并到最终系统的数据框中。将原始数据帧与合并的数据帧合并。后处理通过重命名和删除列来完成。

import pandas as pd
import numpy as np
import io

data = '''
org area date sales
abc NY 01/06/2020 120
abc NY 01/13/2020 220
abc NY 01/20/2020 210
abc NY 07/20/2020 123
xyz OR 01/06/2020 121
xyz OR 01/13/2020 200
xyz OR 07/20/2020 223
'''

df = pd.read_csv(io.StringIO(data), sep='\s+')
date_maxmin = df.groupby(['org','area']).agg(min=('date','min'), max=('date','max'))

date_maxmin.reset_index(inplace=True)

df_all = pd.DataFrame(index=[], columns=['org','area','date'])
for index,row in date_maxmin.iterrows():
    #print(row[2], row[3])
    date_rng = pd.date_range(row[2], row[3], freq='1H')
    l = len(date_rng)
    tmp = pd.DataFrame({'org':[row[0]]*l, 'area':[row[1]]*l, 'date':date_rng})
    df_all = df_all.append(tmp, ignore_index=True)

df_all['hour'] = df_all['date'].dt.hour
df_all['date'] = df_all['date'].dt.date
df_all = pd.concat([df_all,df], keys=['org','area','date'], join='outer', axis=1)
df_all.columns = ['org','area','date','hour','tmp_org','tmp_area','tmp_date','sales']
df_all.drop(['tmp_org','tmp_area','tmp_date'], axis=1, inplace=True)

df_all
    org area    date    hour    sales
0   abc NY  2020-01-06  0   120.0
1   abc NY  2020-01-06  1   220.0
2   abc NY  2020-01-06  2   210.0
3   abc NY  2020-01-06  3   123.0
4   abc NY  2020-01-06  4   121.0
... ... ... ... ... ...
9405    xyz OR  2020-07-19  20  NaN
9406    xyz OR  2020-07-19  21  NaN
9407    xyz OR  2020-07-19  22  NaN
9408    xyz OR  2020-07-19  23  NaN
9409    xyz OR  2020-07-20  0   NaN
9410 rows × 5 columns

找出每个组织和区域的最小值和最大值,并创建一个空数据帧,并将其组合成最终系统的数据帧。

date_maxmin
    org area    min max
0   abc NY  01/06/2020  07/20/2020
1   xyz OR  01/06/2020  07/20/2020
 类似资料:
  • 在 Lua 中,函数 time、date 和 difftime 提供了所有的日期和时间功能。 在 OpenResty 的世界里,不推荐使用这里的标准时间函数,因为这些函数通常会引发不止一个昂贵的系统调用,同时无法为 LuaJIT JIT 编译,对性能造成较大影响。推荐使用 ngx_lua 模块提供的带缓存的时间接口,如 ngx.today, ngx.time, ngx.utctime, ngx.l

  • 我通过连接单独的月、日、年和时间列创建了日期列,但是月和日列的输入数据形式为1,而不是01表示月和日。这是我返回空列的原因吗?还是有其他原因?如果这就是原因,那么如何将日和月列从1改为01、2改为02、…? 这是我第一次使用时间戳,而且我是Scala新手,所以我非常感谢您的帮助。

  • 问题内容: 我需要使用python获取文件创建日期和时间。我试过了: 但它正在返回: 这不是创建日期时间。有办法吗? 问题答案: 为什么不? 对我来说似乎是一个有效的创作时间。

  • 我需要计算从今天或实际日期/时间到00:00小时的特定结束日期之间的剩余时间。

  • 主要内容:日期函数,时间函数VBScript日期和时间函数帮助开发人员将日期和时间从一种格式转换为另一种格式,或以适合特定条件的格式表示日期或时间值。 日期函数 编号 函数 描述 1 Date 一个函数,它返回当前的系统日期。 2 CDate 一个函数,将给定的输入转换为日期。 3 DateAdd 一个函数,它返回一个指定的时间间隔被添加的日期。 4 DateDiff 一个函数,它返回两个时间段之间的差异。 5 DatePa

  • 本文向大家介绍python时间日期函数与利用pandas进行时间序列处理详解,包括了python时间日期函数与利用pandas进行时间序列处理详解的使用技巧和注意事项,需要的朋友参考一下 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。 datetime以毫秒形式存储日期和时间,datetime.timede

  • 问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样

  • 问题内容: 为什么json序列化不适用于datetime对象。据我了解json序列化,任何对象的基本思想都可以调用 内置函数,然后对作为响应得到的对象进行urlencode。但是在日期时间的情况下,我得到以下错误 虽然有一种方法可以将已经可用的对象进行字符串化,但是似乎有意识地决定不这样做,为什么会这样呢? 问题答案: 不,它在模块中无法正常工作。该模块为您提供了默认的编码器:。您需要扩展它以提供