【问题标题】:selecting rows in a pandas dataframe starting with a certain index value从某个索引值开始选择 pandas 数据框中的行
【发布时间】:2017-03-18 07:53:56
【问题描述】:

假设我有一个数据框,其中的行按 trading 天数进行索引,如下所示:

Date          ClosingPrice
2017-3-16      10.00
2017-3-17      10.13
2017-3-20      10.19
    ...

我想找到以(比如说)2017-2-28 开始的 $N$ 行,所以我不知道日期范围,我只知道我想做十行以下的事情。这样做最优雅的方法是什么? (有很多丑陋的方法......)

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    我的快速回答

    s = df.Date.searchsorted(pd.to_datetime('2017-2-28'))[0]
    df.iloc[s:s + 10]
    

    演示

    df = pd.DataFrame(dict(
            Date=pd.date_range('2017-01-31', periods=90, freq='B'),
            ClosingPrice=np.random.rand(90)
        )).iloc[:, ::-1]
    
    date = pd.to_datetime('2017-3-11')
    s = df.Date.searchsorted(date)[0]
    df.iloc[s:s + 10]
    
             Date  ClosingPrice
    29 2017-03-13      0.737527
    30 2017-03-14      0.411525
    31 2017-03-15      0.794309
    32 2017-03-16      0.578911
    33 2017-03-17      0.747763
    34 2017-03-20      0.081113
    35 2017-03-21      0.000058
    36 2017-03-22      0.274022
    37 2017-03-23      0.367831
    38 2017-03-24      0.100930
    

    幼稚时间测试

    【讨论】:

    • 这看起来是对的,但对于我们中间的穴居人来说:第一行的iloc 里面的口头禅是什么?
    • 我不喜欢数据框构造将 ClosingPrice 放在首位。所以我强行颠倒了列的顺序
    • pandas 成语需要一点时间来适应...谢谢!
    【解决方案2】:
    df[df['Date'] >= Date(2017,02,28)][:10] 
    

    我猜?

    【讨论】:

    • df[df['Date'] > = Date(date.split(",")][:10]. # date is some variable
    • 这是一个不错的解决方案!
    猜你喜欢
    • 2013-07-21
    • 2017-08-27
    • 2022-07-08
    • 2015-12-20
    • 2021-10-10
    • 2015-05-03
    • 2012-08-10
    • 2021-08-26
    • 2016-10-16
    相关资源
    最近更新 更多