Расчет кумулятивного продукта по фрейму данных с уникальными идентификаторами - PullRequest
0 голосов
/ 16 марта 2019

Я хочу рассчитать совокупный продукт для каждой даты и для каждого уникального идентификатора по временному ряду данных. Я понимаю, что groupby и cumprod нужно будет использовать вместе. Однако я не уверен в точном синтаксисе.

Вот некоторые примеры данных и требуемый вывод

data = {'date': ['2014-05-01','2014-05-01','2014-05-01','2014-05-01',
     '2014-05-02','2014-05-02','2014-05-02','2014-05-02','2014-05-03',
     '2014-05-03','2014-05-03', '2014-05-03'],'id':[1, 2, 3, 4, 1,
     2, 3, 4, 1, 2, 3, 4],'obs': [1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3, 4]}

df = pd.DataFrame(data, columns = ['date', 'id','obs'])
df.index =df.date
del df['date']

df

            id   obs  
date               
2014-05-01   1    1    
2014-05-01   2    2    
2014-05-01   3    3    
2014-05-01   4    4    
2014-05-02   1    4    
2014-05-02   2    3    
2014-05-02   3    2    
2014-05-02   4    1    
2014-05-03   1    1    
2014-05-03   2    2    
2014-05-03   3    3    
2014-05-03   4    4    

Создан новый столбец cumproduct на основе значений в столбце obs

DF

            id   obs  cumproduct
date               
2014-05-01   1    1    1
2014-05-01   2    2    2
2014-05-01   3    3    3
2014-05-01   4    4    4
2014-05-02   1    4    5
2014-05-02   2    3    5
2014-05-02   3    2    5
2014-05-02   4    1    5
2014-05-03   1    1    6
2014-05-03   2    2    7
2014-05-03   3    3    8
2014-05-03   4    4    9

Любая помощь будет отличной:)

1 Ответ

1 голос
/ 16 марта 2019
import pandas as pd

data = {'date': ['2014-05-01', '2014-05-01', '2014-05-01', '2014-05-01',
                 '2014-05-02', '2014-05-02', '2014-05-02', '2014-05-03',
                 '2014-05-03', '2014-05-03'],
        'id': [1, 2, 3, 4, 1, 2, 3, 4, 1, 2],
        'obs': [1, 2, 3, 4, 5, 5, 5, 5, 6, 7]}

df = pd.DataFrame(data).set_index(['date', 'id']).sort_index(level='date')
df_cumprod = df.groupby('id').cumprod()
print(df_cumprod)

Выходные данные:

               obs
date       id     
2014-05-01 1     1
           2     2
           3     3
           4     4
2014-05-02 1     5
           2    10
           3    15
2014-05-03 4    20
           1    30
           2    70

Обратите внимание, что код и данные, которые вы предоставляете, имеют недостатки в нескольких отношениях и не запускаются.

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