同时堆叠多组列

时间:2018-06-24 09:42:53

标签: pandas

我正在尝试转换此DataFrame

         date  foo1  foo2  foo3  bar1  bar2  bar3
0  2018-06-01   0.1   0.2   0.3   0.4   0.5   0.6
1  2018-06-02   1.1   1.2   1.3   1.4   1.5   1.6

进入这个

         date  i  foo  bar
0  2018-06-01  1  0.1  0.4
1  2018-06-01  2  0.2  0.5
2  2018-06-01  3  0.3  0.6
3  2018-06-02  1  1.1  1.4
4  2018-06-02  2  1.2  1.5
5  2018-06-02  3  1.3  1.6

换句话说:我想垂直堆叠fooXbarX列,并添加包含i的{​​{1}}列。

第一步,我尝试创建一个MultiIndex来将列分为两个级别:

X

但是,这失败了,因为index = pd.MultiIndex.from_product([('foo', 'bar'), (1, 2, 3)], names=('metric', 'i')) df.columns = index 列未包含在MultiIndex中:

date

我可以在2级MultiIndex中包括1级列吗?我已经尝试过ValueError: Length mismatch: Expected axis has 7 elements, new values have 6 elements ,但这会降低MultiIndex的第二个级别。

我可能是从错误的角度来解决这个问题。您还看到其他实现这种转变的方法吗?

1 个答案:

答案 0 :(得分:2)

pd.wide_to_long

的任务
pd.wide_to_long(df, ["foo", "bar"], i="date", j="id")

               foo  bar
date       id          
2018-06-01 1   0.1  0.4
2018-06-02 1   1.1  1.4
2018-06-01 2   0.2  0.5
2018-06-02 2   1.2  1.5
2018-06-01 3   0.3  0.6
2018-06-02 3   1.3  1.6