2015-12-27 8 views
2

У меня есть два кадра данных pandas с многоуровневым индексом (дата - это первое измерение, час дня вторая).Merge pandas DataFrame с MultiIndex

Я хотел бы добавить один столбец из dataframe first в dataframe second. Если бы я просто попробовать:

second["new_col"] = first["new_col"] 

я получаю только NaN значения для каждой строки в second["new_col"], несмотря на два dataframes, имеющих точно такой же индекс.

Я также попытался объединить кадры, как так:

second = pd.merge(second, first.loc[:,"new_col"], how = "inner") 

Что я здесь делаю неправильно?

EDIT:

Я получил решение сам: кажется, как типы данных индексов не были одинаковыми. Я привел указатели столбцов каждого кадра в str и int, которые решили проблему.

Как я могу проверить типы уровней индекса заранее, чтобы избежать таких ошибок?

+0

Вы можете добавить образцы ваших dataframes? – jezrael

ответ

1

Вы можете попробовать df.index.levels:

import pandas as pd 
import io 

temp=u"""Date;Time;ID 
8/14/2015;3:00;aaa123 
8/7/2015;4:00;aaa123 
7/15/2015;2:00;aaa123 
8/22/2015;7:00;aaa123 
8/3/2015;1:00;bbb222 
8/8/2015;5:00;bbb222 
8/10/2015;7:00;bbb222""" 

df1 = pd.read_csv(io.StringIO(temp), parse_dates=[0],sep=";") 

df1 = df1.sort_values(["Date", "Time"]) 
df1= df1.set_index(["Date", "Time"]) 

print df1 
        ID 
Date  Time   
2015-07-15 2:00 aaa123 
2015-08-03 1:00 bbb222 
2015-08-07 4:00 aaa123 
2015-08-08 5:00 bbb222 
2015-08-10 7:00 bbb222 
2015-08-14 3:00 aaa123 
2015-08-22 7:00 aaa123 
print df1.index.levels[0] 
DatetimeIndex(['2015-07-15', '2015-08-03', '2015-08-07', '2015-08-08', 
       '2015-08-10', '2015-08-14', '2015-08-22'], 
       dtype='datetime64[ns]', name=u'Date', freq=None) 

print df1.index.levels[1] 
Index([u'1:00', u'2:00', u'3:00', u'4:00', u'5:00', u'7:00'], dtype='object', name=u'Time') 

print df1.index.levels[0].dtype 
datetime64[ns] 
print df1.index.levels[1].dtype 
object