Произвольная выборка уровней в мультииндексированном фрейме данных - PullRequest
0 голосов
/ 24 декабря 2018

Привет! У меня есть мультииндексный фрейм данных, как показано ниже, и я хочу случайным образом выбрать часть этого фрейма в соответствии с 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  

, и я хочу выбрать2 из ID_1 из 4. Пример результата:

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

Каков наилучший способ сделать это.Спасибо.

1 Ответ

0 голосов
/ 24 декабря 2018

Используйте np.random.choice и выберите 2 случайных уровня из df.index.levels[0].Затем вы можете использовать выбранные уровни для индексации в 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]]
...