在pandas数据框上设置多重索引的最佳方法
我有一个数据表 df
,里面有这些列:
Group
Year
Gender
Feature_1
Feature_2
Feature_3
...
我想用多重索引(MultiIndex)来整理数据,试了以下这种方法:
df.index = pd.MultiIndex.from_arrays([df['Group'], df['Year'], df['Gender']])
这个指令成功地为我的数据表创建了多重索引,但有没有更好的方法可以同时去掉原来的列呢?
1 个回答
5
在pandas中,索引操作其实很简单。你不需要自己创建一个MultiIndex类的实例。
pandas的DataFrame有一个叫做.set_index()
的方法,你可以给它传入一个单独的列名或者一个列名的列表。如果你传入一个列名的列表,它会自动为你设置一个多重索引。
就像这样:
df.set_index(['Group', 'Year', 'Gender'], inplace=True)
注意inplace=True
这个参数,我非常推荐使用它。
当你处理非常大的数据框,几乎占满内存的时候,使用inplace操作会让你的内存使用量减少一半。
想想这个情况:
df2 = df1.set_index('column') # Don't do this
del df1 # Don't do this
当这个操作完成后,内存使用量大致和之前一样。但这只是因为我们执行了del df1
。在这两个命令之间,会有两个相同的数据框的副本,因此会占用双倍的内存。
这样做实际上是隐含地相同的:
df1 = df1.set_index('column') # Don't do this either
而且这样做仍然会占用双倍的内存,而不是使用inplace。