📜  如何在 Pandas 中使用分层索引?

📅  最后修改于: 2022-05-13 01:55:16.006000             🧑  作者: Mango

如何在 Pandas 中使用分层索引?

索引就像一个地址,这就是可以访问数据帧或系列中的任何数据点的方式。行和列都有索引,行索引称为索引,对于列,它是通用的列名。

分层索引

分层索引也称为多索引,即设置多个列名作为索引。在本文中,我们将使用 homeless.csv 文件。

Python3
# importing pandas library as alias pd 
import pandas as pd
  
# calling the pandas read_csv() function.
# and storing the result in DataFrame df
df = pd.read_csv('homelessness.csv')
  
print(df.head())


Python3
# using the pandas columns attribute.
col = df.columns
print(col)


Python3
# using the pandas set_index() function.
df_ind3 = df.set_index(['region', 'state', 'individuals'])
  
# we can sort the data by using sort_index()
df_ind3.sort_index()
  
print(df_ind3.head(10))


Python3
# selecting the 'Pacific' and 'Mountain' 
# region from the dataframe.
  
# selecting data using level(0) index or main index.
df_ind3_region = df_ind3.loc[['Pacific', 'Mountain']]
  
print(df_ind3_region.head(10))


Python3
# using the inner index 'state' for getting data.
df_ind3_state = df_ind3.loc[['Alaska', 'California', 'Idaho']]
  
print(df_ind3_state.head(10))


Python3
# selecting data by passing all levels index.
df_ind3_region_state = df_ind3.loc[[("Pacific", "Alaska", 1434),
                                    ("Pacific", "Hawaii", 4131),
                                    ("Mountain", "Arizona", 7259),
                                    ("Mountain", "Idaho", 1297)]]
df_ind3_region_state


输出:



在以下数据框中,没有索引。

数据框中的列:

蟒蛇3

# using the pandas columns attribute.
col = df.columns
print(col)

输出:

为了使列成为索引,我们使用了 Pandas 的 Set_index()函数。如果我们想让一列成为索引,我们可以简单地在 set_index() 中将列的名称作为字符串传递。如果我们想做多索引或分层索引,我们在 set_index() 中传递列名列表。

下面的代码演示了 Pandas 中的分层索引:

蟒蛇3



# using the pandas set_index() function.
df_ind3 = df.set_index(['region', 'state', 'individuals'])
  
# we can sort the data by using sort_index()
df_ind3.sort_index()
  
print(df_ind3.head(10))

输出:

现在数据框正在使用分层索引或多索引。

请注意,这里我们将 3 列作为索引 ('region', 'state', 'individuals' )。第一个索引 'region' 称为 level(0) 索引,它位于索引层次结构的顶部,下一个索引 'state' 是位于 main 或 level(0) 索引之下的 level(1) 索引,依此类推.因此,索引的层次结构形成,这就是为什么这被称为层次索引

我们有时可能需要将一列作为索引,或者我们想将一个索引列转换为普通列,所以有一个pandas reset_index(inplace = True)函数,它使索引列成为普通列。

在分层索引中选择数据或使用分层索引:

为了使用 .loc() 方法从数据框中选择数据,我们必须在列表中传递索引的名称。

蟒蛇3

# selecting the 'Pacific' and 'Mountain' 
# region from the dataframe.
  
# selecting data using level(0) index or main index.
df_ind3_region = df_ind3.loc[['Pacific', 'Mountain']]
  
print(df_ind3_region.head(10))

输出:



我们不能只使用 level(1) 索引从数据帧中获取数据,如果这样做会出错。我们只能使用级别 (1) 索引或带有级别 (0) 的内部索引或带有元组帮助列表的主索引。

蟒蛇3

# using the inner index 'state' for getting data.
df_ind3_state = df_ind3.loc[['Alaska', 'California', 'Idaho']]
  
print(df_ind3_state.head(10))

输出:

在元组列表的帮助下使用内部级别索引:

句法:

df.loc[[ ( level( 0 )  ,  level( 1 )  , level( 2 )  )  ]]

蟒蛇3

# selecting data by passing all levels index.
df_ind3_region_state = df_ind3.loc[[("Pacific", "Alaska", 1434),
                                    ("Pacific", "Hawaii", 4131),
                                    ("Mountain", "Arizona", 7259),
                                    ("Mountain", "Idaho", 1297)]]
df_ind3_region_state

输出: