【问题标题】:How to get a dictionary or set of data within a particular time frame?如何在特定时间范围内获取字典或数据集?
【发布时间】:2021-02-15 13:58:02
【问题描述】:

我的数据文件包含 datetimeindex - 格式为日期和时间 - 1900-01-01 07:35:23.253。

我有一百万条记录,每分钟收集多个数据点。

datafile =   
TIme----------------------------                      datapoint1-----------datapoint2     
1900-01-01 07:35:23.253---- A --------------------B    
1900-01-01 07:35:23.253    -----B----------------------BH   
1900-01-01 08:35:23.253------V---------------------gh  
1900-01-01 09:35:23.253--------u--------------------90    
1900-01-01 09:36:23.253--------i----------------------op  
1900-01-01 10:36:23.253---------y---------------------op   
1900-01-01 10:46:23.253--------ir---------------------op

所以我的输出应该是,我想得到一小时间隔时间段内的所有行数,如下所示

07:00:00--08:00:00  --- 2  
08:00:00-09:00:00 - 1   
09:00:00=10:00:00 - 2    
10:00:00-11:00:00 -1 

【问题讨论】:

    标签: python-3.x pandas dataframe dictionary datetime


    【解决方案1】:

    您可以将pd.Grouperfreq='1H' 一起使用,然后使用strftime 来调整您想要的格式,并使用pd.DateOffset(hours=1) 添加一个小时来创建一个范围(注意:它是一个字符串):

    df['TIme'] = pd.to_datetime(df['TIme'])
    df = df.groupby(pd.Grouper(freq='1H', key='TIme'))['datapoint1'].count().reset_index()
    df['TIme'] = (df['TIme'].astype(str) + '-' + 
                  ((df['TIme'] + pd.DateOffset(hours=1)).dt.strftime('%H:%M:%S')).astype(str))
    df
    Out[1]: 
                               TIme  datapoint1
    0  1900-01-01 07:00:00-08:00:00           2
    1  1900-01-01 08:00:00-09:00:00           1
    2  1900-01-01 09:00:00-10:00:00           2
    3  1900-01-01 10:00:00-11:00:00           2
    

    如果TIme在索引上,那么你可以在运行代码前先df = df.reset_index(),然后在运行代码后使用df = df.set_index('TIme')

    # df['TIme'] = pd.to_datetime(df['TIme'])
    # df = df.set_index('TIme')
    df = df.reset_index()
    df = df.groupby(pd.Grouper(freq='1H', key='TIme'))['datapoint1'].count().reset_index()
    df['TIme'] = (df['TIme'].astype(str) + '-' + 
                  ((df['TIme'] + pd.DateOffset(hours=1)).dt.strftime('%H:%M:%S')).astype(str))
    df = df.set_index('TIme')
    df
    

    【讨论】:

    • 嗨@David,谢谢。日期在这里是一个索引。我无法将其转换回 column 。命令 df = df.groupby(pd.Grouper(freq='1H', key='TIme'))['datapoint1'].count().reset_index() 返回如下错误'The grouper name Time is not找到'
    • @vishnu you can remove: , key='TIme'
    • @vishnu 我刚刚发布的第二个代码块应该可以解决。
    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2017-06-10
    相关资源
    最近更新 更多