如何通过新索引列的排序顺序附加到数据框的多索引并重新打包?
我有一个带有多索引\n
的数据框,它代表库中的书籍,如下所示:
['section_id','last_checkout']
所以 book_id author_id
section_id last_checkout
4 2016-04-04 07:01:59.223 1 10
2016-04-04 07:01:59.223 2 11
2016-04-04 07:01:59.223 3 12
2016-04-04 07:01:59.233 4 13
2016-04-04 07:01:59.247 5 13
2016-04-04 07:01:59.253 6 14
5 2016-04-04 07:01:59.253 10 15
2016-04-04 07:01:59.268 11 10
到1
的图书在6
部分。我计划在索引中添加另一列4
:
pd.Series({'floor': [1,1,2,1,2,3,4,1]})
在此之后,我希望逐层堆叠,同时保持已存在的顺序:
book_id author_id
section_id floor last_checkout
4 1 2016-04-04 07:01:59.223 1 10
1 2016-04-04 07:01:59.223 2 11
2 2016-04-04 07:01:59.223 3 12
1 2016-04-04 07:01:59.233 4 13
2 2016-04-04 07:01:59.247 5 13
3 2016-04-04 07:01:59.253 6 14
5 4 2016-04-04 07:01:59.253 10 15
1 2016-04-04 07:01:59.268 11 10
我认为它应该非常简单,但在尝试了各种不成功的排列后,API似乎不直观:
book_id author_id
section_id floor last_checkout
4 1 2016-04-04 07:01:59.223 1 10
1 2016-04-04 07:01:59.223 2 11
1 2016-04-04 07:01:59.233 4 13
5 1 2016-04-04 07:01:59.268 11 10
4 2 2016-04-04 07:01:59.223 3 12
2 2016-04-04 07:01:59.247 5 13
3 2016-04-04 07:01:59.253 6 14
5 4 2016-04-04 07:01:59.253 10 15
答案 0 :(得分:0)
这是一个适合您的解决方案。
首先,你定义系列的方式非常不正统。最好将系列定义为:
test = pd.Series([1,1,2,1,2,3,4,1],name='floor')
然后获取您的多索引数据框并重置索引。要“追加”/垂直堆叠列,请使用“join”而不是“append”。所以这就是代码的样子
df = df.reset_index()
floor_series = pd.Series([1,1,2,1,2,3,4,1],name='floor')
df = df.join(test)
df = df.sort('floor')
df = df.set_index(['floor','section_id'])