【发布时间】:2016-01-19 20:02:12
【问题描述】:
我有两个 DataFrame,它们都具有相同级别的相同多索引(代码和日期)。第一个包含有数据的每一行(来自数据库提取),第二个是相同的 DataFrame,除了它包含所有键(每个产品的每个月)。
为了更清楚一点,这里是第一个数据帧 (df_data):
BL0 BL1 BL2 BL3 Shipments
Code Month
ABC 2012-03-01 1000 1000 1000 1000 1000
DEF 2014-08-01 1000 1000 1000 1000 1000
2014-09-01 1000 1000 1000 1000 1000
GHI 2013-12-01 1000 1000 1000 1000 1000
2014-10-01 1000 1000 1000 1000 1000
2014-12-01 1000 1000 1000 1000 1000
这是第二个 (df_full),从 2012 年 1 月到 2015 年 1 月的整个月份:
BL0 BL1 BL2 BL3 Shipments
Code Month
ABC 2012-01-01 NaN NaN NaN NaN NaN
2012-02-01 NaN NaN NaN NaN NaN
2012-03-01 1000 1000 1000 1000 1000
2012-04-01 NaN NaN NaN NaN NaN
...
DEF 2014-07-01 NaN NaN NaN NaN NaN
2014-08-01 1000 1000 1000 1000 1000
2014-09-01 1000 1000 1000 1000 1000
2014-10-01 NaN NaN NaN NaN NaN
...
GHI 2013-12-01 1000 1000 1000 1000 1000
2014-10-01 1000 1000 1000 1000 1000
2014-12-01 1000 1000 1000 1000 1000
现在,我有第一个,我正在尝试构建第二个。我使用 MultiIndex 创建了一个空 DataFrame,创建了用 NaN 填充的每一列,我坚持将 df_full 的值设置为 df_data 中的值。
当我这样做时
df_full.loc[ df_data.index, 'Shipments' ] = df_data['Shipments']
我收到一条错误消息,指出df_data 的索引不在df_dull 中:
KeyError: "[('ABC', '2012-03-01') ('DEF', '2014-08-01')\n ('DEF', '2014-09-01') ...,
('XYZ', '2014-11-01')\n ('XYZ', '2014-12-01')] not in index"
让我烦恼的是,如果我只是执行df_full.loc[ data.index, 'Shipments' ],它会毫无问题地返回系列。我尝试使用元组列表而不是索引,还尝试将切片设置为 1,但无济于事。
我在这里做错了吗?
【问题讨论】:
-
KeyError中的索引看起来很奇怪。\n在那里?或者这是打印输出的人工制品? -
另外,
data.index是什么?你只提到了df_data和df_full。 -
data.index是df_data.index,我编辑了这个问题来纠正这个问题。正如我在回答中提到的那样,\n可能与这一级别的索引是字符串而不是日期时间有关。
标签: python pandas multi-index