Есть ли в Python код, эквивалентный tsset и tsfill? - PullRequest
0 голосов
/ 04 октября 2018

Мне интересно, есть ли в Python эквивалентный код, который предлагает те же функции, что и tsset и tsfill, full в Stata.

Из руководства Stata описание tsset выглядит следующим образом:

tsset объявляет данные в памяти временными рядами

Из руководства Stataописание tsfill, full выглядит следующим образом:

tsfill используется после tsset для заполнения пробелов в данных временных рядов и пробелов в данных панели новыми наблюдениями, которые содержат пропущенные значения.Например, возможно, наблюдения для timevar = 1, 3, 5, 6,.,,22 существует.tsfill создаст наблюдения для timevar = 2 и timevar = 4, содержащие все пропущенные значения.

Пример данных:

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, 1, 2, 4],'obs': [10, 5, 7, 3, 2,4, 3, 8, 6, 11]}

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

df

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

В Stata вы будете использовать tsset id dateчтобы объявить данные временными рядами, вы должны использовать tsfill, full для преобразования данных в следующее:

id 4 в date 2014-05-02 и id 3 в date 2014-05-03 теперь отображаются в фрейме данных

           id  obs
date               
2014-05-01   1   10
2014-05-01   2    5
2014-05-01   3    7
2014-05-01   4    3
2014-05-02   1    2
2014-05-02   2    4
2014-05-02   3    3
2014-05-02   4    .
2014-05-03   1    8
2014-05-03   2    6
2014-05-03   3    .
2014-05-03   4    11

Есть ли в Python эквивалентный код для выполнения того же вывода, что и Stata?

1 Ответ

0 голосов
/ 04 октября 2018

У меня работает следующее:

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, 1, 2, 4],'obs': [10, 5, 7, 3, 2,4, 3, 8, 6, 11]}

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

result = df.set_index(['id','date']).unstack(fill_value='.').stack().sort_index(level=1).reset_index()  
result = result.set_index('date')

In [1]: result
Out[1]: 
            id obs
date              
2014-05-01   1  10
2014-05-01   2   5
2014-05-01   3   7
2014-05-01   4   3
2014-05-02   1   2
2014-05-02   2   4
2014-05-02   3   3
2014-05-02   4   .
2014-05-03   1   8
2014-05-03   2   6
2014-05-03   3   .
2014-05-03   4  11
...