Pandas DataFrame中的分层索引可以使得数据结构更加灵活,但有时候需要将列的分层索引“扁平化”,这样可以方便数据的处理和展示。本文将提供详细的步骤和实例说明。
什么是分层索引?
在Pandas DataFrame中,可以通过多维数组或元组嵌套的方式创建“分层索引”,也称为“层次化索引”。例如,在以下的DataFrame中,使用两个嵌套的列表创建了分层索引:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'year': [2017, 2017, 2018, 2018],
'math': [80, 75, 95, 90],
'english': [70, 85, 90, 80]}
df = pd.DataFrame(data)
df = df.set_index(['name', 'year'])
print(df)
输出:
math english
name year
Alice 2017 80 70
Bob 2017 75 85
Charlie 2018 95 90
David 2018 90 80
上述的DataFrame有两个层级的列标签,分别为“name”和“year”,数据中的每个值都与这两个层级有关联。而使用“扁平化”这个术语,则是指将这两个层级的列标签转换成单一的标签,“math”和“english”。
如何扁平化分层索引?
一种简单的方法是使用Pandas的reset_index()
方法,将分层索引的列转换成行,并创建一个默认的数字索引列。然后,使用pivot()
方法将列与其它列组合起来创建新的DataFrame。
代码示例:
flat_df = df.reset_index()
flat_df = flat_df.pivot(index='name', columns='year')
# 将多重索引转换为单一标签
flat_df.columns = ['_'.join(str(i) for i in col) for col in flat_df.columns.values]
print(flat_df)
输出:
math_2017 math_2018 english_2017 english_2018
name
Alice 80 NaN 70 NaN
Bob 75 NaN 85 NaN
Charlie NaN 95 NaN 90
David NaN 90 NaN 80
上述代码中,reset_index()
方法将原本的分层索引列转换为一般的列,并创建了一个默认的数字索引列,生成新的DataFrame。随后使用.pivot()
将'year'列与math
和english
列组合起来,形成新的DataFrame。
最后,使用.columns
属性将多重索引转换为单一标签。使用'_'.join()
拼接多重索引,然后使用一个循环将总列单元重新命名。这样就扁平化了DataFrame中的列。
总结
使用reset_index()
方法和pivot()
方法可以将Pandas DataFrame中的分层索引列“扁平化”,以便于数据的处理和展示。上述代码提供了这一过程的详尽步骤,并提供了实例作为参照。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何扁平化Pandas DataFrame列中的分层索引 - Python技术站