我有一个列中有多重索引的DraFrame,我想将第一级转换为它自己的列.

原始DF

pd.DataFrame(
    {
        ('a', 'm1'): [0,1],
        ('a', 'm2'): [10, 11],
        ('b', 'm1'): [2,3],
        ('b', 'm2'): [12, 13],
        ('c', 'm1'): [3,4],
        ('c', 'm2'): [13,14],
    },
)

#    a      b      c
#   m1  m2 m1  m2 m1  m2
# 0  0  10  2  12  3  13
# 1  1  11  3  13  4  14

所需数据帧:

 m1 m2 level0
 0  10 a
 1  11 a
 2  12 b
 3  13 b
 3  13 c
 4  14 c

我试着用pd.melt,但没能得到想要的效果.

推荐答案

这里有一个小乐趣:

df.stack().T.stack(0)

输出:

     m1  m2
a 0   0  10
  1   1  11
b 0   2  12
  1   3  13
c 0   3  13
  1   4  14

更接近您想要的输出:

df.stack().T.stack(0).reset_index().drop('level_1', axis=1)

输出:

  level_0  m1  m2
0       a   0  10
1       a   1  11
2       b   2  12
3       b   3  13
4       c   3  13
5       c   4  14

Python相关问答推荐

从webhook中的短代码(而不是电话号码)接收Twilio消息

如何在msgraph.GraphServiceClient上进行身份验证?

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

无法使用requests或Selenium抓取一个href链接

无法定位元素错误404

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

Pandas—在数据透视表中占总数的百分比

如何在图中标记平均点?

计算天数

合并帧,但不按合并键排序

从Windows Python脚本在WSL上运行Linux应用程序

为什么if2/if3会提供两种不同的输出?

找到相对于列表索引的当前最大值列表""

替换现有列名中的字符,而不创建新列

使用Openpyxl从Excel中的折线图更改图表样式

查看pandas字符列是否在字符串列中

根据Pandas中带条件的两个列的值创建新列

python的文件. truncate()意外地没有截断'

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

为罕见情况下的回退None值键入