我有两个带有多级索引的pandas数据帧(日期是第一个维度,第二个维度是第二个维度)。
我想将数据框first
中的一列添加到数据框second
。如果我只是尝试:
second["new_col"] = first["new_col"]
我只为NaN
中的每一行获得second["new_col"]
个值,尽管两个数据帧具有完全相同的索引。
我也尝试合并这样的框架:
second = pd.merge(second, first.loc[:,"new_col"], how = "inner")
我在这里做错了什么?
编辑:
我自己得到了一个解决方案:看起来索引的数据类型并不相同。我将每个框架的索引列标记为str
和int
,这解决了问题。
如何提前检查索引级别的dtypes,以避免此类错误?
答案 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