Поворот временных рядов в панель ... python - PullRequest
0 голосов
/ 19 октября 2018

У меня есть кадр данных с временными рядами по 25 портфелям (ME1_BM1, ME1_BM2 и т. Д.), Наблюдаемый ежемесячно с 1932-02-29 по 2018-07-31.Первые четыре наблюдения выглядят так:

                 ME1_BM1     ME1_BM2  ...
Date
1932-02-29       2.11875     1.28388
1932-03-31       2.18567     1.24275
...

Столбец Дата установлен в качестве индекса.Мне нужно подготовить данные для чего-то другого, поэтому мне нужно преобразовать данные во что-то вроде этого:

ME1_BM1    1932-02-29    2.11875
           1932-03-31    2.18567
           ...
ME1_BM2    1932-02-29    1.28388
           1932-03-31    1.24275
           ...

Невозможно заставить его работать.Я попытался сложить фрейм данных, но затем я получаю Date как индекс, а портфели как вторую «переменную».С pivot я ничего не получил, поскольку мне нужно было указать слишком много переменных ...

Кто-нибудь знает, как это сделать, пожалуйста?

С уважением, Джеспер.

Ответы [ 2 ]

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

Хотя предыдущий ответ более элегантен - вы можете сделать следующее:

df = df.reset_index() # so date is not index anymore

Расплавить портфели:

df2 = pd.melt(df, id_vars=["Date"], value_vars=['ME1_BM1','ME1_BM2'])

Применить групповой режим:

df2.groupby(["variable", "Date"])["value"].max()

Очевидно, вы можете изменить имена столбцов, чтобы они выглядели немного более аккуратными.

Также вы можете просто собрать все свои столбцы с помощью df.columns

удалить дату, и тогда вы не будетене нужно печатать слишком много.

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

Я думаю, вам нужно unstack для Series с MultiIndex:

s = df.unstack()
print (s)
         Date      
ME1_BM1  1932-02-29    2.11875
         1932-03-31    2.18567
ME1_BM2  1932-02-29    1.28388
         1932-03-31    1.24275
dtype: float64

Если хотите 3 столбца DataFrame, добавьте reset_index:

df1 = df.unstack().reset_index()
df1.columns = ['portfolio','date','val']
print (df1)
  portfolio        date      val
0   ME1_BM1  1932-02-29  2.11875
1   ME1_BM1  1932-03-31  2.18567
2   ME1_BM2  1932-02-29  1.28388
3   ME1_BM2  1932-03-31  1.24275
...