对Pandas的层次索引和取值的新方法是Pandas中非常强大的功能之一。本攻略将详细介绍Pandas中层次索引和取值的新方法,包括如何创建、访问和操作层次索引。
创建层次索引
在Pandas中,我们可以通过两种方式创建层次索引:使用元组或使用字典。
使用元组
使用元组创建层次索引可以通过 pd.MultiIndex.from_tuples()
方法实现。例如:
import pandas as pd
index = pd.MultiIndex.from_tuples([('张三', '初中'), ('张三', '高中'), ('李四', '高中'), ('王五', '初中')], names=['name', 'grade'])
此处我们创建了一个包含四个元素的元组列表,每个元组包含两个值:学生姓名和年级。我们可以通过 names
参数为每个级别指定名称,这里我们分别指定为 name
和 grade
。
使用字典
使用字典创建层次索引可以通过 pd.MultiIndex.from_dict()
方法实现。例如:
import pandas as pd
index = pd.MultiIndex.from_dict({'name': ['张三', '张三', '李四', '王五'], 'grade': ['初中', '高中', '高中', '初中']})
此处我们创建了一个包含两个键(即两个级别)的字典,每个键对应一个值列表,分别表示学生姓名和年级。
访问层次索引
访问层次索引可以通过 loc[]
和 iloc[]
进行。其中 loc[]
基于标签进行访问,iloc[]
基于整数索引进行访问。
基于标签
基于标签的访问可以通过在 loc[]
中使用元组进行。例如:
import pandas as pd
df = pd.DataFrame({'math': [80, 90, 95, 85], 'english': [85, 87, 88, 86]}, index=pd.MultiIndex.from_tuples([('张三', '初中'), ('张三', '高中'), ('李四', '高中'), ('王五', '初中')], names=['name', 'grade']))
print(df.loc[('张三', '初中')])
此处我们首先创建了一个包含两个层次的DataFrame,然后通过 loc[]
访问特定索引:
math 80
english 85
Name: (张三, 初中), dtype: int64
基于整数索引
基于整数索引的访问可以通过在 iloc[]
中使用整数进行。例如:
import pandas as pd
df = pd.DataFrame({'math': [80, 90, 95, 85], 'english': [85, 87, 88, 86]}, index=pd.MultiIndex.from_tuples([('张三', '初中'), ('张三', '高中'), ('李四', '高中'), ('王五', '初中')], names=['name', 'grade']))
print(df.iloc[0])
此处我们同样首先创建了一个包含两个层次的DataFrame,然后通过 iloc[]
访问特定索引:
math 80
english 85
Name: (张三, 初中), dtype: int64
操作层次索引
操作层次索引可以通过 stack()
、unstack()
、swaplevel()
等方法进行。其中 stack()
可将列转换为层次索引,unstack()
可将层次索引转换为列,swaplevel()
可交换两个级别的位置。
下面,给出两个示例说明。
示例 1:应用stack()方法
import pandas as pd
df = pd.DataFrame({'math': [80, 90, 95, 85], 'english': [85, 87, 88, 86]}, index=pd.MultiIndex.from_tuples([('张三', '初中'), ('张三', '高中'), ('李四', '高中'), ('王五', '初中')], names=['name', 'grade']))
stacked = df.stack()
print(stacked)
此处我们首先创建了一个包含两个层次的DataFrame,然后通过 stack()
方法将列转换为层次索引:
name grade
张三 初中 math 80
english 85
高中 math 90
english 87
李四 高中 math 95
english 88
王五 初中 math 85
english 86
dtype: int64
示例 2:应用unstack()和swaplevel()方法
import pandas as pd
df = pd.DataFrame({'math': [80, 90, 95, 85], 'english': [85, 87, 88, 86]}, index=pd.MultiIndex.from_tuples([('张三', '初中'), ('张三', '高中'), ('李四', '高中'), ('王五', '初中')], names=['name', 'grade']))
unstacked = df.unstack('name')
swapped = unstacked.swaplevel('grade', 'subject', axis=1)
print(swapped)
此处我们首先创建了一个包含两个层次的DataFrame,然后通过 unstack()
方法将层次索引转换为列,接着通过 swaplevel()
方法交换两个级别的位置:
math english
name 张三 李四 王五 张三 李四 王五
grade subject
初中 math 80 85 85 85 88 86
高中 math 90 95 85 87 88 86
通过以上两个示例,我们可以进一步理解Pandas中层次索引和取值的新方法。