python multiindex函数

  • Post category:Python

Python的pandas库中提供了MultiIndex函数,可以用于多维数据的分组和查询,可以想象为有两个或多个键的数据索引。下面我将提供MultiIndex函数的详细攻略,包括定义方式、基本操作、索引方式以及分级分组等内容。

定义MultiIndex

定义MultiIndex可使用pd.MultiIndex.from_tuples()pd.MultiIndex.from_arrays()两种方式。其中,from_tuples()用于将元组列表转换为MultiIndex,from_arrays()则将列表转为MultiIndex。

示例代码如下:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4, 2),
                  index=[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')],
                  columns=['col_1', 'col_2'])

这里首先使用numpy生成一个4×2的矩阵,在index属性中将其4行数据定义为MultiIndex格式的元组,包含两个级别的索引。这样就可以定义一个包含多级索引的数据表,其中索引包括‘a’、‘b’和‘c’、‘d’两个级别。

基本操作

在定义MultiIndex后,即可使用基本操作,如查看MultiIndex索引等。

  1. 查看MultiIndex的值
# 查看索引的全部值
df.index.tolist()

# 查看属于第0层级别的全部索引值
df.index.get_level_values(0).tolist()

# 查看属于第1层级别的全部索引值
df.index.get_level_values(1).tolist()
  1. MultiIndex转为DataFrame
# 将其转换为DataFrame,并复制一份矩阵值,得到原数据格式
df.reset_index(inplace=True)
df = df.rename(columns={'level_0': 'level_0', 'level_1': 'level_1'})
df = df.pivot(index='level_0', columns='level_1', values=['col_1', 'col_2'])
  1. MultiIndex在DataFrame上做切片和选取操作
# 取出某层级的数据
df.loc[(slice(None), 'c'), :]

# 使用get_loc()和IndexSlice()做切片
idx = pd.IndexSlice
df.loc[idx[:], idx[:]]

索引方式

  1. 通过xs函数访问MultiIndex的行数据

xs()函数可以根据指定的行/列数据索引访问MultiIndex数据表中的数据,支持同时按照行/列索引或元组索引访问数据。

df.xs('c', level=1)

df.xs(('b', 'c'))

df.xs('b')

df.xs(['c', 'd'], level=1)
  1. 通过loc函数访问MultiIndex的行数据

使用loc函数,可基于MultIndex的值来访问数据表中特定的行,该方法常需要更长的代码。示例代码如下:

df = pd.DataFrame(np.random.randn(4, 2),
                  index=[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')],
                  columns=['col_1', 'col_2'])

df.loc[pd.IndexSlice[:, 'c'], :]

其中,pd.IndexSlice[:, 'c']中的’:’表示第一层索引中的全部元素,’c’则表示第二层索引中的所有值都包含在内。

分级分组

  1. 基于特定的MultiIndex级别数据分组

将数据按照行索引的指定级别进行分组,生成一个多索引dp.Series对象,以该多索引的第0级别为分组依据,第1级别为行索引值:

df = pd.DataFrame(np.random.randn(8, 4),
                  index=[['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
                         [1, 2, 1, 2, 1, 2, 1, 2]],
                  columns=['col_1', 'col_2', 'col_3', 'col_4'])

df.groupby(level=0).sum()

df.groupby(level=1).sum()
  1. 基于某层级别的数据进行汇总
# 对该数据进行分组汇总,展示每一块的统计结果
df.groupby(level=0).agg([np.sum, np.mean, np.std])

# 对分组汇总结果进行透视处理,以特定的列为分组依据统计结果
grouped = df.groupby(level=0)
grouped['col_1'].agg({'count': np.count_nonzero, 'sum': np.sum, 
                      'mean': np.mean, 'std': np.std})

以上就是MultiIndex函数的详细攻略。通过设置多级索引,并进行多重重组,MultiIndex将大大简化数据分析的编写过程,提高数据可读性和可操作性。