如何在Pandas中将单层列DataFrame转为多级列索引DataFrame并保留数据?
解决方法
你的需求是将单级列的DataFrame重塑为带多级列索引的结构,同时调整数据的行排列。之前用reindex的方式无效,因为该方法只是匹配现有列名,而新的多级列名在原DataFrame中不存在,导致数据丢失。以下是可行的实现方式:
方法一:直接重塑数据并设置多级列索引
这是最简洁的方式,先将原数据的一维数组重塑为目标形状,再构造带多级索引的新DataFrame:
import pandas as pd # 原DataFrame df = pd.DataFrame({'a': [1], 'b': [2], 'c': [3], 'd': [4]}) # 创建目标多级列索引 multi_columns = pd.MultiIndex.from_arrays([["a", "b"], ["c", "d"]]) # 重塑数据形状并构造新DataFrame result_df = pd.DataFrame(df.values.reshape(2, 2), columns=multi_columns)
运行后得到的result_df就是你想要的结构:
a b c d 0 1 2 1 3 4
方法二:拆分合并法
如果你需要更清晰的分步操作,可以拆分原数据为两部分,分别对应多级列的上下层,再合并:
# 拆分原数据,分别对应第一行和第二行的数据 row1 = df[['a', 'b']].rename(columns={'a': ('a', 'c'), 'b': ('b', 'd')}) row2 = df[['c', 'd']].rename(columns={'c': ('a', 'c'), 'd': ('b', 'd')}) # 合并两行并重置索引 result_df = pd.concat([row1, row2]).reset_index(drop=True)
为什么你的原方法无效?
df.reindex(columns=pd.MultiIndex.from_arrays([["a","b"],["c","d"]])) 仅能根据现有列名重新排列列,但原DataFrame的列是['a','b','c','d'],而新的多级列是[('a','c'), ('b','d')],两者完全不匹配,因此会生成全NaN的DataFrame,无法保留原有数据。你需要的是重塑数据结构而非单纯的列索引重排。
内容的提问来源于stack exchange,提问作者ccsucic
相关产品推荐
相关产品推荐

