如何将熊猫数据框多索引列移动到 2 行

Posted

技术标签:

【中文标题】如何将熊猫数据框多索引列移动到 2 行【英文标题】:How to move pandas data frame multiindex column into 2 rows 【发布时间】:2021-05-19 03:27:59 【问题描述】:

我的数据框有问题。我有一个带有 MultiIndex 列的 pandas 数据框,所以这意味着在我的数据框标题中我有像 ("A", 123"), ("B", 456"), ("C", 789) 这样的元组。我想从这个元组创建 2 行数据框看起来像这样:

"A" "B" "C"
123 456 789
row row row
row row row
row row row

对我来说有两种可能。我可以在 2 行中有一个标题,或者我可以只有一个标题,但在标题之后的 1 行中,我将有我的第二个元组元素。

你能帮我解决这个问题吗?我试过降级,但没用。

【问题讨论】:

【参考方案1】:

如果需要将 MultiIndex 转换为前 2 行,请使用带有转置的 MultiIndex.to_frameDataFrame.append,最后设置默认列名称:

mux = pd.MultiIndex.from_tuples([("A", 123), ("B", 456), ("C", 789)])
df = pd.DataFrame(0, columns=mux, index=[0])
print (df)
    A   B   C
  123 456 789
0   0   0   0

df1 = df.columns.to_frame().T.append(df, ignore_index=True)
df1.columns = range(len(df1.columns))
print (df1)
     0    1    2
0    A    B    C
1  123  456  789
2    0    0    0

如果只需要移动第二级,请通过DataFrame.iloc 选择它,最后通过DataFrame.droplevel 删除第二级:

df2 = df.columns.to_frame().T.iloc[[1]].append(df, ignore_index=True).droplevel(1, axis=1)
print (df2)
     A    B    C
0  123  456  789
1    0    0    0

【讨论】:

非常感谢您的帮助。你提供了一个非常好的和聪明的方法来做到这一点。谢谢!

以上是关于如何将熊猫数据框多索引列移动到 2 行的主要内容,如果未能解决你的问题,请参考以下文章

枢轴熊猫数据框具有多索引列

使熊猫具有多索引列的多个数据框并完全连接

如何应用于具有多索引列的数据框中的一组列

熊猫多索引数据框合并问题

在熊猫中交换/排序多索引列

如何将熊猫数据框转换为多索引数据框