Pandasでlag,lead,first_value,last_valueなどを再現します。
lag(col,1) over(order by sort_col) ,first_value(col) over(order by sort_col)
lag,lead系
shift
を使います。
shiftはwindow関数のorder by句のような変数はないため、先にソートして使う必要があります。
import pandas as pd import numpy as np # 適当なデータをつくる d = { 'random_values':np.random.rand(7), 'id':np.arange(1,8) } idx = pd.date_range(start='2020-01-01',periods=7) df = pd.DataFrame(d,index=idx) #一つ下にずらす df.shift(1) #一つ上にずらす df.shift(-1) #indexを一つ下にずらす df.tshift(1) #もしランダムで並べてひとつずらしたいなら df.sort_values('random_values').shift(1)
first_value,last_value
pandasにもfirst
,last
はありますが、これもindexがあり、さらにそのindexがソートされている場合に使います。
単に最初の値をとりたいなら、スライスを使います。
#first_value df.id[0] #last_value #スライスのリバースソートを使う df.id[0::-1] #ソートが必要なら df.sort_values('random_values').id[0]
first
,last
はperiodsを渡す必要があります。
#最初から1日をとる df.first('1D) #最初から三日分をとる #このとき、indexの日付に存在しない日がある場合はそれを加味して、最初から3日をとる df.first('3D') #これはうまく動かない df.sort_values(`random_values).first('1D')