我正在尝试转换此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
换句话说:我想垂直堆叠fooX
和barX
列,并添加包含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的第二个级别。
我可能是从错误的角度来解决这个问题。您还看到其他实现这种转变的方法吗?
答案 0 :(得分:2)
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