在MultiIndexed DataFrame中随机采样级别

时间:2018-12-24 18:09:23

标签: python pandas dataframe multi-index

嗨,我有一个如下所示的多索引数据框,我想根据ID_1随机选择该数据框的一部分:

下面是我的数据框

ID_1 ID_2 feature_1 feature_2 
  1    1      0        0
       2      1        1 
  2    1      1        1 
       2      0        1    
  3    1      1        1 
       2      0        1  
  4    1      1        1 
       2      0        1  

,我想从4个ID_1中选择2个。示例结果:

ID_1 ID_2 feature_1 feature_2 
  2    1      1        1 
       2      0        1    
  4    1      1        1 
       2      0        1  

什么是最好的方法。谢谢。

1 个答案:

答案 0 :(得分:1)

使用np.random.choice并从df.index.levels[0]中随机选择2个级别。然后,您可以使用选定的级别通过df索引到df.loc

df
           feature_1  feature_2
ID_1 ID_2                      
1    1             0          0
     2             1          1
2    1             1          1
     2             0          1
3    1             1          1
     2             0          1
4    1             1          1
     2             0          1

# np.random.seed(0)  # Uncomment to make results reproducible.
df.loc[np.random.choice(df.index.levels[0], 2, replace=False)]

           feature_1  feature_2
ID_1 ID_2                      
3    1             1          1
     2             0          1
4    1             1          1
     2             0          1

如果需要在第一层进行相同的操作,请使用pd.IndexSlice进行第一层切片。

v = np.random.choice(df.index.levels[1], 2, replace=False)
df.loc[pd.IndexSlice[:, v], :]
# df.loc(axis=0)[pd.IndexSlice[:, v]]