2013-11-20 130 views
6

我有一个时间序列数据框,我想通过试验和测量重新索引它。熊猫重建索引dataframe multiindex

,简体中文,我有这样的:

   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 

我怎样才能最好做到这一点?

回答

7

就在昨天,杰出的安迪海登把这个功能加入了0.13版本的熊猫,它将在任何一天发布。有关他添加到文档中的使用示例,请参见here

如果您愿意从源代码安装熊猫开发版本,现在就可以使用它。

df['Measurements'] = df.reset_index().groupby('Trial').cumcount() 

下面的代码是等价的,如果少了精辟的,任何新版本的熊猫会工作。

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也适用于指数中的愚蠢行为,但“等价”不......我在文档中有点厚脸皮,并说“*本质上*等价”:p) –

+0

如果我的索引不叫('测量') - 而是根本没有名字? – TheChymera

+1

未命名的索引级别可以使用''level''关键字指定,例如'groupby(level = 1)''。 –