Разделение по строкам, эквивалентным в пандах (питон - PullRequest
0 голосов
/ 07 июня 2018

Я использую Azure Machine Learning Studio и что нужно добавить промежуточную сумму в мой набор данных.Это включает в себя столбец даты, и я хочу суммировать все строки (для группы) до или перед датой строки.

В SQL Server я бы использовал:

    SELECT [t1].*,
SUM([t1].[Amount (Settlement CCY)) 
OVER (
  PARTITION BY [t1].[Contract Ref], [t1].[LOBCode], [t1].[Superline], [t1].[Occupation], [t1].[TransType], [t1].[SettCCY]
  ORDER BY     [t1].[Transaction Date] ASC
  ROWS BETWEEN UNBOUNDED PRECEDING
       AND     CURRENT ROW
)
FROM [t1]
GROUP BY [t1].[contract ref], [t1].[Transaction date], [t1].[LOBCode], [t1].[Superline], [t1].[Occupation], [t1].[TransType], [t1].[SettCCY]

, ноМашинное обучение Azure использует SQLite, где предложения Over / Partition не реализованы.

Я пробовал альтернативу в python / pandas:

dataframe1 = dataframe1.assign(cumAMTscTD=dataframe1.groupby(['ContractRef', 'Basis', 'LOBCode', 'Superline', 'Occupation', 'TransType', 'SettCCY'])['AmtSettCCY'].transform('sum')).sort_values(['ContractRef','TransDate'])

, но это подводит итог всему для группы, а не только те, для даты до текущей строки.Поэтому я предполагаю, что это не распространяется на:

ROWS BETWEEN UNBOUNDED PRECEDING
   AND     CURRENT ROW

Как бы я это достиг?

1 Ответ

0 голосов
/ 07 июня 2018

В SQLite вы можете реализовать логику как:

with t as (
      select t1.contract_ref, t1.transaction_date, sum(t1.amount) as amount
      from t1
      group by t1.contract_ref, t1.transaction_date
     )
select t.*,
       (select sum(t2.amount)
        from t t2
        where t2.contract_ref = t.contract_ref and
              t2.transaction_date <= t.transaction_date
       ) as running_amount
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...