如何将熊猫数据框多索引列移动到 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_frame
和 DataFrame.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 行的主要内容,如果未能解决你的问题,请参考以下文章