SQL-эквивалент для Pandas's [df.groupby (...) ['col_name']. Shift (1)] - PullRequest
0 голосов
/ 21 мая 2018

У меня есть этот кусок кода, и я хочу написать его как SQL.Кто-нибудь знает, как будет выглядеть эквивалентный код SQL?

lags = range(1, 5)
df = df.assign(**{
    '{}{}'.format('lag', t): df.groupby('article_id').num_views.shift(t) for t in lags
})

ОБНОВЛЕНИЕ:

Я ищу стандартный диалект SQL.Вот пример набора данных (первые 10 строк):

  article_id section time   num_views   comments
0   abc111b     A   00:00   15            0
1   abc111b     A   01:00   36            0
2   abc111b     A   02:00   36            0
3   bbbddd222hf A   03:00   41            0
4   bbbddd222hf B   04:00   44            0
5   nnn678www   B   05:00   39            0
6   nnn678www   B   06:00   38            0
7   nnn678www   B   07:00   66            0
8   nnn678www   C   08:00   65            0
9   nnn678www   C   09:00   87            1

1 Ответ

0 голосов
/ 21 мая 2018

вы можете использовать функцию LAG () , принадлежащую стандарту ANSI SQL-99 "windowing functions":

select
  article_id, section, time, num_views, comments,
  lag(num_views, 1, 0) over(partition by article_id order by article_id, time) as lag1,
  lag(num_views, 2, 0) over(partition by article_id order by article_id, time) as lag2,
  lag(num_views, 3, 0) over(partition by article_id order by article_id, time) as lag3,
  lag(num_views, 4, 0) over(partition by article_id order by article_id, time) as lag4
from tab;

Полный и работающий пример SQLFiddle ...

PS имейте ввиду, что не все системы RDBMS реализуют "windowing functions"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...