python - 如何在熊猫中将列索引转换为行索引?
问题描述
我有一个看起来像这样的熊猫数据框:
A B
Date a b c a b c
20180101 1 1 1 365 365 365
20180102 2 2 2 364 364 364
... ... ... ... ... ... ...
20181231 365 365 365 1 1 1
你可以看到我有一个多级列索引。但是,我想将其转换为以下格式:
a b c
Date Catelog1
20180101 A 1 1 1
B 365 365 365
20180102 A 2 2 2
B 364 364 364
... ... ... ... ...
20181231 A 365 365 365
B 1 1 1
然而,这对我来说并不明显,我们如何实现这一点,此外,如果我在列轴上有两个以上的级别,我只想将一个保留在底部并在行轴上移动所有上述索引怎么办?
解决方案
设置
idx = pd.MultiIndex.from_product([list('AB'), list('abc')])
df = pd.DataFrame(0, columns=idx, index=list('pqrs'))
df
A B
a b c a b c
p 0 0 0 0 0 0
q 0 0 0 0 0 0
r 0 0 0 0 0 0
s 0 0 0 0 0 0
使用swaplevel
和stack
:
df.swaplevel(0, 1, axis=1).stack()
a b c
p A 0 0 0
B 0 0 0
q A 0 0 0
B 0 0 0
r A 0 0 0
B 0 0 0
s A 0 0 0
B 0 0 0
另一种选择是stack
使用参数level=0
:
df.stack(level=0)
a b c
p A 0 0 0
B 0 0 0
q A 0 0 0
B 0 0 0
r A 0 0 0
B 0 0 0
s A 0 0 0
B 0 0 0
推荐阅读
- chart.js - ChartJS:时间序列折线图中的多线 xAxis 标签
- angular - 处理多个重定向角度路线
- api - 将 API 调用从子多米诺骨牌转发到静态 IP 地址(来自 ISP)
- css - v-btn 在鼠标悬停/悬停时闪烁/闪烁
- java - Scala 使用 intellijidea 在 Java 11 上构建错误
- android - 无法使用 RecyclerView 的 onClickeListener 为简单的单例分配新值
- java - 单击listview上的项目以获取片段后如何刷新数据
- java - Java 选项计数器
- c# - 如何在 ZK4500 指纹扫描仪中将手指数据保存到数据库并使用 c# 匹配手指?
- sql-server - 与另一个表的日期列相比,根据其日期列更新表