Кадр данных от длинного до широкого с использованием двух столбцов в качестве переменных - PullRequest
1 голос
/ 19 марта 2019

Я хочу изменить следующие данные из длинного в широкое, используя port1 и port2 в качестве представляющих интерес переменных

            port1  port2     w_ret
date                              
2006-01-01    0.0    0.0  0.067991
2006-01-01    0.0    1.0  0.033219
2006-01-01    1.0    0.0  0.073324
2006-01-01    1.0    1.0  0.039730
2006-01-02    0.0    0.0  0.033616
2006-01-02    0.0    1.0  0.022452
2006-01-02    1.0    0.0 -0.024854
2006-01-02    1.0    1.0  0.020411

Я хочу, чтобы перестроенные данные выглядели так:

             0.00.0     0.01.0    1.00.0    1.01.0     

date
2006-01-01  0.067991   0.033219  0.073324  0.039730   
2006-01-02  0.033616   0.022452 -0.024854  0.020411

Числа вверху похожи на числа port1 и port2 вместе.Я не уверен, что получится, если будет использован правильный код.

Я пробовал unstack() при создании port1 и port2 индекса с date и попытался использоватьpivot_table, но не повезло в достижении этого результата.

Любые идеи будут великолепны!

1 Ответ

2 голосов
/ 19 марта 2019

Сначала объедините столбцы, затем DataFrame.set_index с параметром append=True и последнее изменение на Series.unstack:

s = df['port1'].astype(str) + df['port2'].astype(str)
df = df.set_index(s, append=True)['w_ret'].unstack()
print (df)
              0.00.0    0.01.0    1.00.0    1.01.0
date                                              
2006-01-01  0.067991  0.033219  0.073324  0.039730
2006-01-02  0.033616  0.022452 -0.024854  0.020411
...