Панды: изменение структуры данных путем разделения столбцов в столбце и переменной - PullRequest
0 голосов
/ 17 октября 2018

У меня есть следующий фрейм данных, который я пытаюсь растопить:

import numpy as np
import pandas as pd
dates = pd.date_range('1/1/2014', periods=4)
df = pd.DataFrame(np.eye(4, ), index=dates, columns=['A_var1', 'A_var2', 'B_var1', 'B_var2'])
print(df)

             A_var1  A_var2  B_var1  B_var2
2014-01-01     1.0     0.0     0.0     0.0
2014-01-02     0.0     1.0     0.0     0.0
2014-01-03     0.0     0.0     1.0     0.0
2014-01-04     0.0     0.0     0.0     1.0

Я хочу получить следующее:

            type    var1    var2  
2014-01-01   A      1.0     0.0    
2014-01-01   B      0.0     0.0    
2014-01-02   A      0.0     1.0     
2014-01-02   B      0.0     0.0  
2014-01-03   A      0.0     0.0    
2014-01-03   B      1.0     0.0
2014-01-04   A      0.0     0.0     
2014-01-04   B      0.0     1.0

Есть идеи, как это сделать эффективно?Я знаю, что могу использовать функцию плавления, но не могу заставить ее работать в этом контексте.

Большое спасибо,

1 Ответ

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

Вы можете использовать stack для многоиндексированных столбцов.

In [304]: df.columns = df.columns.str.split('_', expand=True)

In [305]: df.stack(0).reset_index(1)
Out[305]:
           level_1  var1  var2
2014-01-01       A   1.0   0.0
2014-01-01       B   0.0   0.0
2014-01-02       A   0.0   1.0
2014-01-02       B   0.0   0.0
2014-01-03       A   0.0   0.0
2014-01-03       B   1.0   0.0
2014-01-04       A   0.0   0.0
2014-01-04       B   0.0   1.0
...