26

日時インデックス付きのパンダデータフレームがあります

Date
2013-02-22 00:00:00+00:00    0.280001
2013-02-25 00:00:00+00:00    0.109999
2013-02-26 00:00:00+00:00   -0.150000
2013-02-27 00:00:00+00:00    0.130001
2013-02-28 00:00:00+00:00    0.139999
Name: MOM12

指定された日時インデックスの前の3つの値を評価したい。

date = "2013-02-27 00:00:00+00:00"
df.ix[date]

これを検索しましたが、インデックスが日付なのでできません

df.ix[int-1]
4

3 に答える 3

24

これを行う1つの方法は、最初に次の方法でインデックスキーの整数位置を取得することですget_loc

In [15]: t = pd.Timestamp("2013-02-27 00:00:00+00:00")

In [16]: df1.index.get_loc(t)
Out[16]: 3

そして、次を使用できますiloc(整数の場所を取得する、または整数の場所でスライスする):

In [17]: loc = df1.index.get_loc(t)

In [18]: df.iloc[loc - 1]
Out[18]: 
Date    2013-02-26 00:00:00
                      -0.15
Name: 2, Dtype: object

In [19]: df1.iloc[slice(max(0, loc-3), min(loc, len(df)))]
        # the min and max feel slightly hacky (!) but needed incase it's within top or bottom 3
Out[19]:                         
Date                    
2013-02-22  0.280001
2013-02-25  0.109999
2013-02-26 -0.150000

ドキュメントのインデックス作成セクションを参照してください。


DataFrameをどのように設定したかはよくわかりませんが、私には日時インデックスのようには見えません。DataFrame(タイムスタンプインデックス付き)を取得する方法は次のとおりです。

In [11]: df = pd.read_clipboard(sep='\s\s+', header=None, parse_dates=[0], names=['Date', None])

In [12]: df
Out[12]: 
                 Date          
0 2013-02-22 00:00:00  0.280001
1 2013-02-25 00:00:00  0.109999
2 2013-02-26 00:00:00 -0.150000
3 2013-02-27 00:00:00  0.130001
4 2013-02-28 00:00:00  0.139999

In [13]: df1 = df.set_index('Date')

In [14]: df1
Out[14]:                
Date                
2013-02-22  0.280001
2013-02-25  0.109999
2013-02-26 -0.150000
2013-02-27  0.130001
2013-02-28  0.139999
于 2013-03-01T20:02:24.580 に答える
2

お願いしますdf.shift().loc[date]か?

于 2020-05-18T07:51:02.267 に答える
0

Shiftを使用して、前の行の値を取得します

data=[('2013-02-22 00:00:00+00:00',    0.280001)
,('2013-02-25 00:00:00+00:00',    0.109999)
,('2013-02-26 00:00:00+00:00',   -0.150000)
,('2013-02-27 00:00:00+00:00',    0.130001)
,('2013-02-28 00:00:00+00:00',    0.139999)]
df=pd.DataFrame(data=data,columns=['date','value'])
df['date']=pd.to_datetime(df['date'])

df['p_value']=df.value.shift(1)
df['pp_value']=df.value.shift(2)
df['ppp_value']=df.value.shift(3)
print(df)

出力

         date                    value   p_value  pp_value  ppp_value
 0 2013-02-22 00:00:00+00:00  0.280001       NaN       NaN        NaN
 1 2013-02-25 00:00:00+00:00  0.109999  0.280001       NaN        NaN
 2 2013-02-26 00:00:00+00:00 -0.150000  0.109999  0.280001        NaN
 3 2013-02-27 00:00:00+00:00  0.130001 -0.150000  0.109999   0.280001
 4 2013-02-28 00:00:00+00:00  0.139999  0.130001 -0.150000   0.109999
于 2021-04-02T22:02:33.667 に答える