Pandas中的分层数据是指可以包含多个级别(层次)的数据。分层数据在数据分析和处理中非常常见,Pandas提供了一系列处理分层数据的工具。
分层索引
分层数据通常使用分层索引来表示。Pandas中的分层索引可以是具有多个级别的索引(Index)或列(Column),它们可以在创建数据时指定,或者在数据已经存在的情况下使用reindex方法进行重新索引。
下面是一个示例,我们创建了一个有两个级别的索引(Index):
import pandas as pd
# 创建一个2级行索引和3级列索引的DataFrame
ix = pd.MultiIndex.from_product([['A', 'B'], ['X', 'Y', 'Z']], names=['level_1', 'level_2'])
cols = pd.MultiIndex.from_product([['a', 'b', 'c'], [1, 2, 3]], names=['col_1', 'col_2'])
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], index=ix, columns=cols)
在这个示例中,我们使用了MultiIndex.from_product方法来创建两个级别的行索引和三个级别的列索引。我们也可以使用MultiIndex.from_tuples方法或MultiIndex.from_arrays方法来创建分层索引。
分层数据的访问
访问分层数据的方式和普通的数据相比稍微有些不同。访问分层数据可以使用loc方法和[]运算符,使用这些方法时需要指定每个级别的值。下面是一些示例:
# 访问第一行第一列的值
df.loc[('A', 'X'), ('a', 1)]
# 访问所有行的第一列
df.loc[:, ('a', 1)]
# 访问所有行的第一和第二列
df.loc[:, [('a', 1), ('a', 2)]]
# 访问第一层行索引为'A'的所有行
df.loc['A']
# 访问第二层列索引为1的所有列
df.loc[:, :, 1]
分层数据的重塑
使用Pandas中的stack和unstack方法可以对分层数据进行重塑。stack方法可以将列索引中的最内层索引“压缩”为行索引的最内层层次,而unstack方法可以将行索引中的最内层索引“展开”为列索引的最内层层次。下面是一些示例:
# 将列索引最内层索引unstack为行索引最内层层次
df.unstack()
# 将行索引最内层层次为第二个索引的值stack为列索引最内层层次
df.stack(level=1)
如果分层数据中有多个层次,可以指定stack或unstack方法中的level参数来指定要处理的层次。
分层数据的合并
在分层数据中,当两个数据集的分层索引具有相同的层次和标签时,可以使用concat方法对它们进行合并。下面是一个示例:
# 创建另一个DataFrame
df2 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], index=ix, columns=cols)
# 合并两个DataFrame
pd.concat([df, df2])
在合并数据时,可以使用join参数指定要使用的合并方式,如outer、inner等。在默认情况下,Pandas会按行合并两个数据集,也可以通过指定axis参数来按列合并。
以上就是Pandas中的分层数据和操作方法的详细讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas中的分层数据 - Python技术站