【问题标题】:How to filter dates on multiindex dataframe如何过滤多索引数据框上的日期
【发布时间】:2017-12-06 04:43:14
【问题描述】:

我正在寻找一种按星期几和/或选定日期过滤多索引数据框的方法,如下所示。假设我需要

  • select only mondays的查询;
  • 我想select all days except monday and friday的另一个查询;
  • 用于选择日期输入列表中存在的数据的第三个查询,例如 select all dates in ['2015-05-14', '2015-05-21', '2015-05-22']
  • 最后,查询结合了基于星期几和日期列表的选择,例如 select all dates in ['2015-05-14', '2015-05-21', '2015-05-22'] and thursdays

有什么办法呢?

                Col1        Col2     Col3    Col4
Date        Two 
2015-05-14  10   81.370003  6.11282  39.753  44.950001
            11   80.419998  6.03380  39.289  44.750000
            C3   80.879997  6.00746  41.249  44.360001
2015-05-19   3   80.629997  6.10465  41.047  40.980000
            S9   80.550003  6.14370  41.636  42.790001
2015-05-21  19   80.480003  6.16096  42.137  43.680000
2015-05-22  C3   80.540001  6.13916  42.179  43.490002

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    如果您有Date 作为datetime 类型,您可以使用dayofweek 获取星期几并根据它进行查询。

    仅选择星期一:

    df[df.index.get_level_values('Date').dayofweek == 0]
    

    选择除周一和周五以外的日子:

    import numpy as np
    df[np.in1d(df.index.get_level_values('Date').dayofweek, [1,2,3,5,6])]
    
    #                    Col1      Col2   Col3       Col4
    #      Date Two             
    #2015-05-14 10  81.370003   6.11282 39.753  44.950001
    #           11  80.419998   6.03380 39.289  44.750000
    #           C3  80.879997   6.00746 41.249  44.360001
    #2015-05-19 3   80.629997   6.10465 41.047  40.980000
    #           S9  80.550003   6.14370 41.636  42.790001
    #2015-05-21 19  80.480003   6.16096 42.137  43.680000
    

    【讨论】:

    • 酷!让我再问你一些问题:如果我还想选择日期输入列表中存在的数据怎么办?比如,选择 ['2015-05-14', '2015-05-21', '2015-05-22'] 中的所有日期;还有更多,如果我想结合基于星期几和日期列表的选择怎么办?我可以编辑问题。谢谢!
    • 例如,您可以使用或条件np.in1d(dayofweek, [1,2,3,5,6]) | np.in1d(datestr, ['2017-01-01', '2017-04-02'])。您可能需要在第二个表达式中将日期转换为字符串。
    猜你喜欢
    • 2022-09-27
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多