Python 向数据帧添加新级别

Python 向数据帧添加新级别,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我创建了一个数据框架,如下所示: df= id var0 var1 var2 var3 var4 ... var137 5171 10.0 2.8 0.0 5.0 1.0 ... 9.4 5171 40.9 2.5 3.4 4.5 1.3 ... 7.7 5171 60.7 3.1 5.2

我创建了一个数据框架,如下所示:

df= 
        id      var0    var1    var2    var3    var4 ...  var137
        5171    10.0    2.8     0.0     5.0     1.0  ...  9.4  
        5171    40.9    2.5     3.4     4.5     1.3  ...  7.7  
        5171    60.7    3.1     5.2     6.6     3.4  ...  1.0
        ...
        5171    0.5     1.3     5.1     0.5     0.2  ...  0.4
        4567    1.5     2.0     1.0     4.5     0.1  ...  0.4  
        4567    4.4     2.0     1.3     6.4     0.1  ...  3.3  
        4567    6.3     3.0     1.5     7.6     1.6  ...  1.6
        ...
        4567    0.7     1.4     1.4     0.3     4.2  ...  1.7
       ... 
        9584    0.3     2.6     0.0     5.2     1.6  ...  9.7  
        9584    0.5     1.2     8.3     3.4     1.3  ...  1.7  
        9584    0.7     3.0     5.6     6.6     3.0  ...  1.0
        ...
        9584    0.7     1.3     0.1     0.0     2.0  ...  1.7
df= 
  uniq_id      id      var0    var1    var2    var3    var4 ...  var137
    0          5171    10.0    2.8     0.0     5.0     1.0  ...  9.4  
    1          5171    40.9    2.5     3.4     4.5     1.3  ...  7.7  
    2          5171    60.7    3.1     5.2     6.6     3.4  ...  1.0
   ...
   57          5171    0.5     1.3     5.1     0.5     0.2  ...  0.4
    0          4567    1.5     2.0     1.0     4.5     0.1  ...  0.4  
    1          4567    4.4     2.0     1.3     6.4     0.1  ...  3.3  
    2          4567    6.3     3.0     1.5     7.6     1.6  ...  1.6
    ...
   57          4567    0.7     1.4     1.4     0.3     4.2  ...  1.7
    ... 
    0          9584    0.3     2.6     0.0     5.2     1.6  ...  9.7  
    1          9584    0.5     1.2     8.3     3.4     1.3  ...  1.7  
    2          9584    0.7     3.0     5.6     6.6     3.0  ...  1.0
    ...
    57         9584    0.7     1.3     0.1     0.0     2.0  ...  1.7
共有58项
id
级别。我需要添加一个新的级别,让我们调用id
uniq\u id
到此数据帧,以便最终结果如下:

df= 
        id      var0    var1    var2    var3    var4 ...  var137
        5171    10.0    2.8     0.0     5.0     1.0  ...  9.4  
        5171    40.9    2.5     3.4     4.5     1.3  ...  7.7  
        5171    60.7    3.1     5.2     6.6     3.4  ...  1.0
        ...
        5171    0.5     1.3     5.1     0.5     0.2  ...  0.4
        4567    1.5     2.0     1.0     4.5     0.1  ...  0.4  
        4567    4.4     2.0     1.3     6.4     0.1  ...  3.3  
        4567    6.3     3.0     1.5     7.6     1.6  ...  1.6
        ...
        4567    0.7     1.4     1.4     0.3     4.2  ...  1.7
       ... 
        9584    0.3     2.6     0.0     5.2     1.6  ...  9.7  
        9584    0.5     1.2     8.3     3.4     1.3  ...  1.7  
        9584    0.7     3.0     5.6     6.6     3.0  ...  1.0
        ...
        9584    0.7     1.3     0.1     0.0     2.0  ...  1.7
df= 
  uniq_id      id      var0    var1    var2    var3    var4 ...  var137
    0          5171    10.0    2.8     0.0     5.0     1.0  ...  9.4  
    1          5171    40.9    2.5     3.4     4.5     1.3  ...  7.7  
    2          5171    60.7    3.1     5.2     6.6     3.4  ...  1.0
   ...
   57          5171    0.5     1.3     5.1     0.5     0.2  ...  0.4
    0          4567    1.5     2.0     1.0     4.5     0.1  ...  0.4  
    1          4567    4.4     2.0     1.3     6.4     0.1  ...  3.3  
    2          4567    6.3     3.0     1.5     7.6     1.6  ...  1.6
    ...
   57          4567    0.7     1.4     1.4     0.3     4.2  ...  1.7
    ... 
    0          9584    0.3     2.6     0.0     5.2     1.6  ...  9.7  
    1          9584    0.5     1.2     8.3     3.4     1.3  ...  1.7  
    2          9584    0.7     3.0     5.6     6.6     3.0  ...  1.0
    ...
    57         9584    0.7     1.3     0.1     0.0     2.0  ...  1.7
我试过这个:

n_t = range(0,58)
pd.concat([df], keys=n, names=['uniq_id'])
但是这会给uniq\u id的所有值加上0。我还试图在此基础上创建一个空的
多索引
,然后为每个
id
获取部分数据帧,并将其添加到这个
多索引
中,但失败了。我怎样才能修好它

您描述了一个:

您可以通过以下方式将其添加到索引中:

df.set_index(['id', 'uniq_id']) # If id was a Series
或者如果
id
已经是索引:

df.set_index('uniq_id', append=True) # If id was already an Index
这将为您提供一个多索引: 输出:

你描述了一个:

您可以通过以下方式将其添加到索引中:

df.set_index(['id', 'uniq_id']) # If id was a Series
或者如果
id
已经是索引:

df.set_index('uniq_id', append=True) # If id was already an Index
这将为您提供一个多索引: 输出:


累积计数能解决您的问题吗
df['uniq_id']=df.groupby('id').cumcount()
行数总是58的倍数吗?我认为@Jondiedoop应该是answer@Jondiedoop这将向数据帧添加一个新列。我需要添加一个新的索引/级别it@Birish,我已尝试编辑我的答案以解决此问题,并将其设为索引。累积计数可以解决您的问题吗
df['uniq_id']=df.groupby('id').cumcount()
行数总是58的倍数吗?我认为@Jondiedoop应该是answer@Jondiedoop这将向数据帧添加一个新列。我需要添加一个新的索引/级别it@Birish,我试图编辑我的答案来解决这个问题,并将其作为索引