【问题标题】:Pandas filtering - between_time on a non-index column熊猫过滤 - 非索引列上的 between_time
【发布时间】:2015-01-21 10:48:58
【问题描述】:

我需要过滤掉特定时间的数据。 DataFrame 函数 between_time 似乎是正确的方法,但是,它仅适用于数据帧的索引列;但我需要原始格式的数据(例如,数据透视表会期望日期时间列具有正确的名称,而不是作为索引)。

这意味着每个过滤器看起来像这样:

df.set_index(keys='my_datetime_field').between_time('8:00','21:00').reset_index()

这意味着每次运行此类过滤器时都会进行两次重新索引操作。

这是一个好的做法还是有更合适的方法来做同样的事情?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    创建一个DatetimeIndex,但将其存储在一个变量中,而不是 DataFrame 中。 然后调用它的indexer_between_time 方法。这将返回一个整数数组,然后可用于使用 iloc 从 df 中选择行:

    import pandas as pd
    import numpy as np
    
    N = 100
    df = pd.DataFrame(
        {'date': pd.date_range('2000-1-1', periods=N, freq='H'),
         'value': np.random.random(N)})
    
    index = pd.DatetimeIndex(df['date'])
    df.iloc[index.indexer_between_time('8:00','21:00')]
    

    【讨论】:

    • 也可以使用切片索引器根据日期进行切片df.iloc[index.slice_indexer('2017-12')]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多