在熊猫数据框上设置多索引的最佳方法

Posted

技术标签:

【中文标题】在熊猫数据框上设置多索引的最佳方法【英文标题】:Best way to set a multiindex on a pandas dataframe 【发布时间】:2021-01-17 04:07:38 【问题描述】:

我有一个包含这些列的 Dataframe df

Group
Year
Gender
Feature_1
Feature_2
Feature_3
...

以后想用MultiIndex来堆叠数据,我试过这样:

df.index = pd.MultiIndex.from_arrays([df['Group'], df['Year'], df['Gender']])

这条指令成功地为我的数据框创建了 MultiIndex,但是有没有更好的方法也可以删除原始列?

【问题讨论】:

使用df = df.set_index(['Group', 'Year', 'Gender']) 谢谢,如果你能写成答案,我会接受它作为解决方案。 【参考方案1】:

pandas 中的索引比这更容易。您不需要创建自己的 MultiIndex 类实例。

pandas DataFrame 有一个名为 .set_index() 的方法,该方法将单个列作为参数或列列表。提供列列表将为您设置多索引。

像这样:

df.set_index(['Group', 'Year', 'Gender'], inplace=True)

注意inplace=True,我强烈推荐。

当您处理几乎无法放入内存的庞大数据帧时,就地操作将几乎您的内存使用量的一半。

考虑一下:

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

并且仍然需要双倍的记忆。

【讨论】:

以上是关于在熊猫数据框上设置多索引的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中使用具有多索引的地图?

具有可迭代对象的字典字典到具有多索引的可迭代对象索引的熊猫数据框

多索引熊猫数据框上的值错误

基于列值和多索引的熊猫“countif”

熊猫添加更高级别的列多索引

如何在熊猫中获得多级 x 轴标记图?