Создать многоуровневый фрейм данных из данного фрейма данных - PullRequest
0 голосов
/ 23 октября 2018

Имеются два разных df:

'A'

            a  b         
2016-11-21  2  1
2016-11-22  3  4
2016-11-23  5  2 
2016-11-24  6  3 
2016-11-25  6  3

'B'

            a  b         
2016-11-21  3  0
2016-11-22  1  0
2016-11-23  1  6 
2016-11-24  1  5 
2016-11-25  0  2

Как создать «многоуровневый» фрейм данных этой формы:

'C'

            A     B
            a  a  b  b           
2016-11-21  2  3  1  0
2016-11-22  3  1  4  0
2016-11-23  5  1  2  6
2016-11-24  6  1  3  5
2016-11-25  6  0  3  2

* Индекс - это объект времени данных

Спасибо

1 Ответ

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

Используйте concat:

df = pd.concat([A, B], keys=('A','B'), axis=1)
print (df)
            A     B   
            a  b  a  b
2016-11-21  2  1  3  0
2016-11-22  3  4  1  0
2016-11-23  5  2  1  6
2016-11-24  6  3  1  5
2016-11-25  6  3  0  2

И для сортировки уровней добавьте sort_index:

df = pd.concat([A, B], keys=('A','B'), axis=1).sort_index(axis=1, level=1)
print (df)
            A  B  A  B
            a  a  b  b
2016-11-21  2  3  1  0
2016-11-22  3  1  4  0
2016-11-23  5  1  2  6
2016-11-24  6  1  3  5
2016-11-25  6  0  3  2

Это нерекомендуется, но возможно:

df = pd.concat([A, B], keys=('A','B'), axis=1)

cols = df.columns.get_level_values(0)
df = df.sort_index(axis=1, level=1)
df.columns = [cols, df.columns.get_level_values(1)]
print (df)
            A     B   
            a  a  b  b
2016-11-21  2  3  1  0
2016-11-22  3  1  4  0
2016-11-23  5  1  2  6
2016-11-24  6  1  3  5
2016-11-25  6  0  3  2

, поскольку в этом случае возникает проблема выбора столбца, поскольку дублированные имена столбцов:

print (df['A'])
            a  a
2016-11-21  2  3
2016-11-22  3  1
2016-11-23  5  1
2016-11-24  6  1
2016-11-25  6  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...