【问题标题】:Slicing across a timeseries range in a multiindex DataFrame在多索引 DataFrame 中跨时间序列范围切片
【发布时间】:2021-12-07 17:14:33
【问题描述】:

我有一个 DataFrame,用于跟踪多个全球市场的“Adj 收盘价”,导致日期重复。为了清理它,我使用.set_index(['Index Ticker', 'Date'])

DataFrame sample

我的问题是收盘价可以追溯到 1997 年 7 月 2 日,但我只需要 2020 年 1 月 1 日及以后。我尝试使用idx = pd.IndexSlice,后跟df.loc[idx[ :, '2020-01-01':], :] 以及df.loc[(slice(None), '2020-01-01':), :],但是这两种方法都会在: 上返回一个语法错误,我用它来分割一系列日期。在特定日期之后获取我需要的数据的任何提示?提前谢谢!

【问题讨论】:

  • 没有一些样本数据很难说。但我认为这个df.loc[idx[ :, '2020-01-01':]. :] 点(.)应该是逗号df.loc[idx[ :, '2020-01-01':], :]
  • 抱歉,这只是一个错字。我已将其更正为逗号,但仍然是尝试跨特定日期范围切片的相同问题。添加了我要切片的实际数据框的图片,以便获得相同的列,但在“2020-01-01”之前没有任何值

标签: python pandas dataframe slice


【解决方案1】:

试试:

# create dataframe to approximate your data
df = pd.DataFrame({'ticker' : ['A']*5 + ['M']*5, 
                   'Date' : pd.date_range(start='2021-01-01', periods=5).tolist() + pd.date_range(start='2021-01-01', periods=5).tolist(),
                   'high' : range(10)}
                 ).groupby(['ticker', 'Date']).sum()

                   high
ticker Date
A      2021-01-01     0
       2021-01-02     1
       2021-01-03     2
       2021-01-04     3
       2021-01-05     4
M      2021-01-01     5
       2021-01-02     6
       2021-01-03     7
       2021-01-04     8
       2021-01-05     9

# evaluate conditions against level 1 (Date) of your multiIndex; level 0 is ticker
df[df.index.get_level_values(1) > '2021-01-03']

                  high
ticker Date
A      2021-01-04     3
       2021-01-05     4
M      2021-01-04     8
       2021-01-05     9

或者,如果可能,在设置 multiIndex 之前删除不需要的日期。

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2018-02-28
    • 2021-06-21
    • 2018-08-10
    • 2017-05-17
    • 2018-12-03
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多