重新索引Pandas数据帧多级子索引

6
我是一名有用的助手,可以为您翻译文本。
我有一个时间序列数据框,我想通过试验和测量来重新索引它。
简单来说,我的数据如下:
                value
Trial         
    1     0        13
          1         3
          2         4
    2     3       NaN
          4        12
    3     5        34   

我想把它变成这样:
                  value
Trial    
    1      0        13
           1         3
           2         4
    2      0       NaN
           1        12
    3      0        34

如何最好地完成这个任务?
1个回答

7
只是昨天,著名的Andy Hayden在pandas的0.13版本中添加了这个功能,该版本即将发布。您可以在此处查看他添加到文档中的使用示例。
如果您习惯于从源代码安装开发版本的pandas,则现在可以使用它。
df['Measurements'] = df.reset_index().groupby('Trial').cumcount()

以下代码等效,但较为冗长,而且适用于任何近期版本的pandas。
grouped = df.reset_index().groupby('Trial')
df['Measurements'] = grouped.apply(lambda x: Series(np.arange(len(x)), x.index))

最后,df.set_index(['Trial', 'Measurements'], inplace=True) 可以得到你想要的结果。

4
哈哈!“illustrious” +1 ;)(注意:cumcount 也适用于索引中的重复项,但“equivalent”不适用……我在文档中有点调皮,并说“本质上等价” :p) - Andy Hayden
如果我的索引不叫做(“measurements”)- 而是根本没有名字呢? - TheChymera
1
未命名的索引级别可以使用“level”关键字指定,例如“groupby(level = 1)”。 - Dan Allan
我该如何选择第一个索引的第一个子索引?df.ix [1,0] 选择了一列 :-/ - TheChymera
另外,我的数据框中每个试验有约242个测量值 - 不知何故,你上面粘贴的代码给出了从242到484的测量指数:/ - TheChymera
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接