在pandas数据框上设置多重索引的最佳方法

3 投票
1 回答
6290 浏览
提问于 2025-04-18 06:20

我有一个数据表 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。

撰写回答