将pandas DataFrame与MultiIndex合并

时间:2015-12-27 12:56:49

标签: python pandas

我有两个带有多级索引的pandas数据帧(日期是第一个维度,第二个维度是第二个维度)。

我想将数据框first中的一列添加到数据框second。如果我只是尝试:

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

我只为NaN中的每一行获得second["new_col"]个值,尽管两个数据帧具有完全相同的索引。

我也尝试合并这样的框架:

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

我在这里做错了什么?

编辑:

我自己得到了一个解决方案:看起来索引的数据类型并不相同。我将每个框架的索引列标记为strint,这解决了问题。

如何提前检查索引级别的dtypes,以避免此类错误?

1 个答案:

答案 0 :(得分:2)

您可以尝试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