如何从列名创建多级索引?

时间:2017-02-20 20:24:41

标签: python pandas multi-index

我想从嵌入在列名中的数据创建索引作为多级索引的一部分。这个问题比描述要容易得多。这就是我的原始数据:

d = {'time':[0,1,2], 'part_0_hits': [100,200,300], 'part_1_hits': [25,50,75]}
df = pd.DataFrame(d)

我想创建一个名为'part'的新索引,其中包含列名中的部件号。结果需要如下所示:

d2 = {'time':[0,1,2,0,1,2], 'part':[0,0,0,1,1,1], 'hits':[100,200,300,25,50,75]}
df2 = pd.DataFrame(d2)

我会把表放在这里,但我不确定如何进行标记。这是我的iPython笔记本的快照,其中显示了数据框:

enter image description here

必须有一种优雅的方式来做到这一点,但我似乎无法找到它。如果我可以让它看起来像上面的数据帧,我可以使用set_index来创建多级索引......

感谢!!!

1 个答案:

答案 0 :(得分:2)

您可以将pd.melt用于此

df = pd.melt(df, id_vars=["time"],var_name="part", value_name="hits")
df['part'] = df['part'].str.extract('(\d+)').astype(int)

你得到了

    time    part    hits
0    0      0       100
1    1      0       200
2    2      0       300
3    0      1       25
4    1      1       50
5    2      1       75