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

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

4

1 回答 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)得到你想要的结果。

于 2013-11-20T19:43:40.970 回答