DataFrame.droplevel(self, level, axis=0)
返回删除指定的索引/列级别的DataFrame。
参数: | level : int,str或list-like 如果给出了字符串,则必须是级别的名称。如果类似列表,则元素必须是级别的名称或位置索引。 axis : {0或'index',1或'columns'},默认为0 |
返回: |
|
例子
1)删除行索引的某一层
import pandas as pd
# 创建一个带有多级行索引的 DataFrame
index = pd.MultiIndex.from_tuples([('A', 'X'), ('A', 'Y'), ('B', 'X'), ('B', 'Y')],
names=['Upper', 'Lower'])
df = pd.DataFrame({'Value': [10, 20, 30, 40]}, index=index)
print("原始 DataFrame:")
print(df)
# 删除最外层的索引 'Upper'
result = df.droplevel('Upper')
print("\n删除 'Upper' 索引后的 DataFrame:")
print(result)
2)删除列索引的某一层
# 创建一个带有多级列索引的 DataFrame
columns = pd.MultiIndex.from_tuples([('A', 'X'), ('A', 'Y'), ('B', 'X'), ('B', 'Y')],
names=['Upper', 'Lower'])
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=columns)
print("原始 DataFrame:")
print(df)
# 删除列索引的最外层 'Upper'
result = df.droplevel('Upper', axis=1)
print("\n删除 'Upper' 索引后的 DataFrame:")
print(result)
3)删除多层索引
import pandas as pd
# 创建一个带有多级列索引的 DataFrame
columns = pd.MultiIndex.from_tuples([('A', 'X'), ('A', 'Y'), ('B', 'X'), ('B', 'Y')],
names=['Upper', 'Lower'])
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=columns)
print("原始 DataFrame:")
print(df)
# 删除列索引的最外层 'Upper'
result = df.droplevel('Upper', axis=1)
print("\n删除 'Upper' 索引后的 DataFrame:")
print(result)
3)删除多层索引
import pandas as pd
# 创建一个带有多级列索引的 DataFrame
columns = pd.MultiIndex.from_tuples([('A', 'X' ,'Y'), ('A', 'Y' ,'Z'), ('B', 'X', 'Z'), ('B', 'Y', 'C')],
names=['Upper', 'Lower', 'cjavapy'])
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=columns)
print("原始 DataFrame:")
print(df)
# 删除多个层的列索引
result = df.droplevel(['Upper', 'Lower'], axis=1)
print("\n删除多层索引后的 DataFrame:")
print(result)
4)使用示例
import pandas as pd
# 创建一个多级索引的 DataFrame
df = pd.DataFrame([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]).set_index([0, 1]).rename_axis(['a', 'b'])
# 设置多级列索引
df.columns = pd.MultiIndex.from_tuples([
('c', 'e'), ('d', 'f')
], names=['level_1', 'level_2'])
print("原始 DataFrame:")
print(df)
# 删除 'a' 索引层
result_1 = df.droplevel('a')
print("\n删除 'a' 索引后的 DataFrame:")
print(result_1)
# 删除列索引的 'level_2' 层
result_2 = df.droplevel('level_2', axis=1)
print("\n删除列索引的 'level_2' 层后的 DataFrame:")
print(result_2)