pandas實現hive的lag和lead函數

lag

該函數的格式如下:

lag(字段名,N) over(partition by 分組字段 order by 排序字段 排序方式) 

lag括號裏理由兩個參數,第一個是字段名,第二個是數量N,這裏的意思是,取分組排序後比該條記錄序號小N的對應記錄的指定字段的值,如果字段名爲ts,N爲1,就是取分組排序後上一條記錄的ts值。

lead

該函數的格式如下:

lead(字段名,N) over(partition by 分組字段 order by 排序字段 排序方式) 

lead括號裏理由兩個參數,第一個是字段名,第二個是數量N,這裏的意思是,取分組排序後比該條記錄序號大N的對應記錄的對應字段的值,如果字段名爲ts,N爲1,就是取分組排序後下一條記錄的ts值。

窗口函數的pandas實現

pandas中使用shift函數來實現lag/lead函數

df = pd.DataFrame({'A':[12,20,12,5,18,11,18],
                   'C':['A','B','A','B','B','A','A']})

df['lag'] = df.sort_values('A').groupby('C')['A'].shift(1)
df['lead'] = df.sort_values('A').groupby('C')['A'].shift(-1)
print(df)

可以看到,當shift函數中的數字爲正數時,我們就實現了lag的功能,當數字爲負數時,實現的是lead的功能。不過這裏切記,一定要排序哦,否則可能出現下面的結果:

df = pd.DataFrame({'A':[12,20,12,5,18,11,18],
                   'C':['A','B','A','B','B','A','A']})

df['lag'] = df.groupby('C')['A'].shift(1)
df['lead'] = df.groupby('C')['A'].shift(-1)
print(df)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章