什么是多重索引?
多重索引是这样的。
有点烦,所以研究了如何摆脱它。
[如何取消]
对于df 中的列或行。 下面显示了两种方法。
#Index
df.index = df.index.get_level_values(0)
df.index = df.index.droplevel(1)#Column
df.columns = df.columns.get_level_values(0)
df.columns = df.columns.droplevel(1)
.get_level_values( ) 括号中的数字指定要保留的 MultiIndex 的层次结构。 顶层为0,底层为1、2、3等。
.droplevel() 括号中的数字指定要删除 MultiIndex 的层次结构。 可以以 [0, 1] 的形式删除多个数字。
示例
只留下第一层。
df.columns = df.columns.get_level_values(0)
#df.columns = df.columns.droplevel(1)df
只留下第二层。
df.columns = df.columns.get_level_values(1)
#df.columns = df.columns.droplevel(0)
df
顺带一提,当得到MultiIndex时,它是这样输出的。
df.index.get_level_values
[如何指定多重索引]
本节介绍如何使用开头所示的 MultiIndex 创建 DataFrame。
- 将 MultiIndex 对象应用于 DataFrame 的index/columns
- 将数组应用于 DataFrame 的index/columns
1.应用MultiIndex对象
MultiIndex 对象是使用 pd.MultiIndex.from_tuples() 生成的。
#生成数组
arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],["one", "two", "one", "two", "one", "two", "one", "two"],
]#创建 MultiIndex 对象
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])
index
对于 MultiIndex 对象,可以指定层次结构的名称。 在上例中,指定了first, second。
使之创建一 DataFrame,将如下所示:
df = pd.DataFrame(np.random.randn(8, 4), index=index)
df
在column中指定时,看起来像这样:
df2 = pd.DataFrame(np.random.randn(3, 8), index=["A", "B", "C"], columns=index)
df2
2.数组应用
数组也可以按原样应用。 此情况下,无法指定层次结构的名称。
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
df
df2 = pd.DataFrame(np.random.randn(3, 8), index=["A", "B", "C"], columns=arrays)
df2