Как написать этот sql в пандах?

У меня есть этот код SQL, и я хочу писать в Pandas. В каждом примере, который я видел, используются функции groupby и order by за пределами оконной функции, а это не то, что я хочу. Я не хочу, чтобы мои данные выглядели сгруппированными, вместо этого мне просто нужна совокупная сумма моего нового столбца (reg_sum), упорядоченная по часам для каждого article_id.

SELECT
*,
SUM(registrations) OVER(PARTITION BY article_id ORDER BY time) AS 
cumulative_regs
FROM table

Пример данных того, что мне нужно получить (столбец reg_sum):

article_id  time    registrations   reg_sum
      A      7          6              6
      A      9          5              11
      B      10         1              1
      C      10         2              2
      C      11         4              6

Если бы кто-нибудь мог сказать, что эквивалентно этому в Pandas, это было бы здорово. Спасибо!

Трудно помочь, если вы не включите некоторые данные и желаемый результат. Не все мы говорим на SQL бегло.

cfort 10.08.2018 17:22

Я обновил свой вопрос.

user8436761 10.08.2018 17:29

Эта ссылка может быть полезной: pandas.pydata.org/pandas-docs/stable/comparison_with_sql.htm‌ l

Aura 10.08.2018 21:33
2
3
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При использовании groupby и cumsum это должно работать:

import pandas as pd
import numpy as np

# generate data
df = pd.DataFrame({'article_id': np.array(['A', 'A', 'B', 'C', 'C']), 
                   'time': np.array([7, 9, 10, 10, 11]), 
                   'registrations': np.array([6, 5, 1, 2, 4])})

# compute cumulative sum of registrations sorted by time and grouped by article_id
df['reg_sum'] = df.sort_values('time').groupby('article_id').registrations.cumsum()

Выход:

  article_id  time  registrations  reg_sum
0          A     7              6        6
1          A     9              5       11
2          B    10              1        1
3          C    10              2        2
4          C    11              4        6

Другие вопросы по теме