【问题标题】:In Python-Pandas, How can I subset a dataframe by specific datetime index values?在 Python-Pandas 中,如何按特定日期时间索引值对数据框进行子集化?
【发布时间】:2015-01-07 10:56:02
【问题描述】:

我有很多天的数据框,看起来像这样......每隔 30 分钟的连续行:

                      a   b
2006-05-08 09:30:00  10  13
2006-05-08 10:00:00  11  12
                          .
                          .
                          .
2006-05-08 15:30:00  15  14
2006-05-08 16:00:00  16  15

但是,我只关心某些特定时间,所以我希望 df 的每一天看起来像:

2006-05-08 09:30:00  10  13
2006-05-08 11:30:00  14  15
2006-05-08 13:00:00  18  15
2006-05-08 16:00:00  16  15

意思是,我只想在数据框中的所有不同日子里不时保留行(16、13、11:30、9:30)。

谢谢

更新:

我取得了一些进步,使用

hour = df.index.hour
selector = ((hour == 16) | (hour == 13) | (hour == 11) | (hour == 9))
df = df[selector]

但是,我也需要考虑分钟数,所以我尝试了:

minute = df.index.minute
selector = ((hour == 16) & (minute == 0) | (hour == 3) & (minute == 0) | (hour == 9) & (minute == 30) | (hour == 12) & (minute == 0))

但我得到错误:

ValueError: operands could not be broadcast together with shapes (96310,) (16500,) 

【问题讨论】:

    标签: python pandas time-series dataframe


    【解决方案1】:
    import numpy as np
    import pandas as pd
    N = 100
    df = pd.DataFrame(range(N), index=pd.date_range('2000-1-1', freq='30T', 
                                                    periods=N))
    mask = np.in1d((df.index.hour)*100+(df.index.minute), [930, 1130, 1300, 1600])
    print(df.loc[mask])
    

    产量

                          0
    2000-01-01 09:30:00  19
    2000-01-01 11:30:00  23
    2000-01-01 13:00:00  26
    2000-01-01 16:00:00  32
    2000-01-02 09:30:00  67
    2000-01-02 11:30:00  71
    2000-01-02 13:00:00  74
    2000-01-02 16:00:00  80
    

    【讨论】:

    • 不,我不知道。我在我的df 上尝试了你的代码,它工作得很好......:/我会在每个((hour == X) & (minutes = Y)) 对周围放置一组额外的括号,但我认为这实际上不会改变结果。
    • 形状(96310,)(16500,) 对您有什么意义吗?这可能是一个线索......一个可能是df 的长度,但另一个是什么?如果你把selector的形状或者selector的点点滴滴打印出来,发现畸形的结果,你就会发现这个bug。
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 2021-12-05
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2019-03-16
    相关资源
    最近更新 更多