我有一个Pandas的数据框,看起来像这样:
df = pd.DataFrame({('AA', 'A'): {0: 'a', 1: 'b', 2: 'c'},
('AA', 'B'): {0: 'd', 1: 'e', 2: 'f'},
('AA', 'C'): {0: 'g', 1: 'h', 2: 'i'},
('BB', 'D'): {0: 1, 1: 2, 2: 3},
('BB', 'E'): {0: 4, 1: 5, 2: 6}})
AA BB
A B C D E
0 a d g 1 4
1 b e h 2 5
2 c f i 3 6
我想取消透视'BB'中的所有列,并将'AA'中的所有列保留为标识符。因此,我应该以如下形式结束:
` AA BB
A B C Variable Value
0 a d g D 1
1 b e h D 2
2 c f i D 3
3 a d g E 4
4 b e h E 5
5 c f i E 6`
下面的代码不起作用
df.melt(id_vars=['AA'], value_vars=['BB'], col_level=0) `
这样的工作,但并不觉得很冗长。我还结束了一个额外的列和多索引是平坦的:
df.melt(id_vars=[('AA','A'),('AA','B'), ('AA','C')], value_vars=[('BB','D'),('BB','E')])
` (AA, A) (AA, B) (AA, C) variable_0 variable_1 value
0 a d g BB D 1
1 b e h BB D 2
2 c f i BB D 3
3 a d g BB E 4
4 b e h BB E 5
5 c f i BB E 6`
1条答案
按热度按时间dgiusagp1#
您可以使用以下命令实现类似于上一个命令的效果:
输出:
要还原多索引:
输出: