Слияние Pandas Dataframe с мультииндексом с датой - PullRequest
0 голосов
/ 23 мая 2018

У меня есть несколько фреймов данных с индексом даты из нескольких источников, которые я хочу объединить в один мультииндексный фрейм данных.Я изо всех сил пытаюсь выяснить, как это сделать.

Начиная с двух кадров данных:

Источник 1

+---------------------+------+------+-----+-------+
|        date         | open | high | low | close |
+---------------------+------+------+-----+-------+
| 2018-04-04 20:00:00 | xxx  | xxx  | xxx | xxx   |
| 2018-04-04 21:00:00 | xxx  | xxx  | xxx | xxx   |
| 2018-04-04 22:00:00 | xxx  | xxx  | xxx | xxx   |
+---------------------+------+------+-----+-------+

Источник 2

+---------------------+------+------+-----+-------+
|        date         | open | high | low | close |
+---------------------+------+------+-----+-------+
| 2018-04-04 20:00:00 | xxx  | xxx  | xxx | xxx   |
| 2018-04-04 21:00:00 | xxx  | xxx  | xxx | xxx   |
| 2018-04-04 22:00:00 | xxx  | xxx  | xxx | xxx   |
+---------------------+------+------+-----+-------+

Я хотел бы объединить их, чтобы они были мультииндексированы на дату с источником1 или источником2.

Что-то вроде:

+---------------------+---------+------+-----+-------+
|                     |         |      |     |       |
+---------------------+---------+------+-----+-------+
| 2018-04-04 20:00:00 | source1 |      |     |       |
|                     | open    | high | low | close |
|                     | xxx     | xxx  | xxx | xxx   |
|                     | source2 |      |     |       |
|                     | open    | high | low | close |
|                     | xxx     | xxx  | xxx | xxx   |
| 2018-04-04 21:00:00 | source1 |      |     |       |
|                     | open    | high | low | close |
|                     | xxx     | xxx  | xxx | xxx   |
|                     | source2 |      |     |       |
|                     | open    | high | low | close |
|                     | xxx     | xxx  | xxx | xxx   |
| 2018-04-04 22:00:00 | source1 |      |     |       |
|                     | open    | high | low | close |
|                     | xxx     | xxx  | xxx | xxx   |
|                     | source2 |      |     |       |
|                     | open    | high | low | close |
|                     | xxx     | xxx  | xxx | xxx   |
+---------------------+---------+------+-----+-------+

Кто-нибудь может помочь?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Используйте concat с keys и set_index для DatetimeIndex, а затем swaplevel с sort_index:

df = (pd.concat([df1.set_index('date'),df2.set_index('date')], keys=['source1','source2'])
        .swaplevel(0,1)
        .sort_index())
print (df)
                            open high  low close
date                                            
2018-04-04 20:00:00 source1  xxx  xxx  xxx   xxx
                    source2  xxx  xxx  xxx   xxx
2018-04-04 21:00:00 source1  xxx  xxx  xxx   xxx
                    source2  xxx  xxx  xxx   xxx
2018-04-04 22:00:00 source1  xxx  xxx  xxx   xxx
                    source2  xxx  xxx  xxx   xxx
0 голосов
/ 23 мая 2018

Вы можете перейти на concat, указав ключи, т.е.

df3 = pd.concat([df1,df2],keys=['source1','source2']).reset_index(level=0)

df3 = df3.set_index(['date','level_0']).sort_index(level='date')



                                open    high    low    close
 date                 level_0                                
 2018-04-04 20:00:00  source1   xxx     xxx     xxx    xxx   
                      source2   xxx     xxx     xxx    xxx   
 2018-04-04 21:00:00  source1   xxx     xxx     xxx    xxx   
                      source2   xxx     xxx     xxx    xxx   
 2018-04-04 22:00:00  source1   xxx     xxx     xxx    xxx   
                      source2   xxx     xxx     xxx    xxx   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...