将列标签与 Pandas MultiIndex 合并

问题描述 投票:0回答:2

我有一个看起来像这样的 pandas 数据框。

我想让它像下图一样显示,使用国家/地区作为我的索引

当我将“国家/地区”列设为索引时,其余行变得很奇怪,并且它将每个国家/地区显示为一个元组,我怀疑是因为它组合了多索引的不同级别。 我还想让“国家/地区类型”列的标题正确显示,但我不确定如何设置标签并摆脱那些未命名的级别。

TIA 给任何可以帮助我的人。

python pandas dataframe multi-index
2个回答
1
投票

也许我错了,但我想象/假设您正在这样阅读多标题电子表格:

df = pd.read_excel("file.xlsx", header=[0, 1, 2])

你可以试试这个:

df = (
    pd.read_excel("file.xlsx", index_col=[0, 1], header=[0, 1, 2]) # 1st chain
        .rename_axis(index=["Country", "Country Type"], columns=[None]*3)
)

df.index.nlevels   # should be 2 (previously 1)
df.columns.nlevels # should be 3

如果您不处理 Excel 文件,请将第一链替换为

df.set_index(list(df.columns[:2]))


0
投票

您可以在加载数据后重命名所有列。具有相同名称的列不会让它高兴。 尝试这样的事情:

import pandas as pd

#proper non repeated column names
column_names = ["new_column_name1", "new_column_name2", "new_column_name3"]
data = pd.read_csv("your_data.csv", names=column_names, header=None)

#proper data_types
data_types = {
    "new_column_name1": str,   # Example: Integer data type
    "new_column_name2": float, # Example: Float data type
    "new_column_name3": int, # Example: Float data type
}

# Set data types
data = data.astype(data_types)

# Use the first column as the index
data = data.set_index("new_column_name1") 

# Reindex the DataFrame
data = data.reindex(drop=True)
© www.soinside.com 2019 - 2024. All rights reserved.