我有一个DataFrame,它看起来像
Emp1 Empl2 date Company
0 0 0 2012-05-01 apple
1 0 1 2012-05-29 apple
2 0 1 2013-05-02 apple
3 0 1 2013-11-22 apple
18 1 0 2011-09-09 google
19 1 0 2012-02-02 google
20 1 0 2012-11-26 google
21 1 0 2013-05-11 google
我想传递公司和日期来设置此DataFrame的MultiIndex
。当前它有一个默认索引。我使用
df.set_index(['Company', 'date'], inplace=True)
但是当我打印的时候,它打印的是None
,这不是正确的方法吗?我还想移动列company和date的位置,使company成为层次结构中的第一个索引,date成为第二个索引,对此有什么想法吗?
2条答案
按热度按时间oalqel3c1#
当你传入inplace时,会对原始变量进行更改并返回None,而函数不会返回修改后的 Dataframe ,它会返回None。
因此,当您有这样一行时:
它首先修改
df
...但随后将df
设置为None!也就是说,您只需使用以下行:
hjzp0vay2#
set_index()
的结果是一个副本,因此您可以将其分配回df
(而不是使用inplace=
参数)。注意
set_index()
在默认情况下是如何覆盖旧索引的,您可以通过append=
参数追加新索引来保留旧索引。新的索引不需要来自列,你可以传递一个panda Series或者一个与 Dataframe 长度相同的numpy数组给
set_index()
。要设置一个全新的MultiIndex,可以使用
pd.MultiIndex
对象。根据您用来构建索引的对象,有from_arrays()
、from_tuples()
、from_product()
等方便的方法。例如,如果要从
lst1
和lst2
的笛卡尔积创建多索引,可以通过调用from_product()
来完成。请注意,多索引的长度必须与 Dataframe 的长度匹配,才能使此操作正常工作。