2016-01-28 2 views
3

У меня есть dataframe, который индексируется в соответствии со следующими переменными: NAME - дата. Имя - это своего рода странный идентификатор, а дата - дата.Как получить случайный образец в мультииндексе pandas dataframe?

Данные очень большие, и я хотел бы проверить данные, которые у меня есть для нескольких случайных выборов NAME.

То есть,

  1. выбрать случайное имя среди возможных
  2. инспектировать данные для этого имени, упорядоченных по времени.

Я не знаю, как это сделать. Я вижу, что мы можем использовать get_level_values, но у меня нет конкретного имени, я просто хочу много раз называть случайные выборки.

Любая помощь оценена! Спасибо!

+1

Многоиндекс или индекс в форме «Имя - дата»? – James

+0

Это мультииндекс 'df = set_index (['name', 'date'])' –

ответ

2
import pandas as pd 
import numpy as np 
import random 
import string 

df = pd.DataFrame(data={'NAME': [''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(17)) for _ in range(10)], 
      'Date': pd.date_range('1/01/2016', periods=10), 
      'Whatever': np.random.randint(20, 50, 10)}, 
        columns=['NAME', 'Date', 'Whatever']).set_index(['NAME', 'Date']) 

random_df = df[df.index.get_loc(np.random.choice(df.index.levels[0])) == True].sort_index(level=1) 
print(random_df) 

Возвращает df, который выглядит следующим образом:

       Whatever 
NAME    Date     
xg71zOEQVOEfCZ2ne 2016-01-01  35 
qLCXuEerCXi6gmF1Y 2016-01-02  26 
0vDe7x8TIb5FRv7hV 2016-01-03  40 
Ddc6FGKBdtcLqT53O 2016-01-04  31 
IYcrKG9pjt7mHH3qn 2016-01-05  44 
lAWObNTC8yXPMY3v5 2016-01-06  49 
k90QWdPc5qFSCFi1c 2016-01-07  22 
BWQoHo8lUyEwK9Nuf 2016-01-08  42 
Xt0bxUerTan0i1eGw 2016-01-09  22 
tc7PYCzpyGmYLbnxu 2016-01-10  46 

random_df, который выглядит следующим образом :

       Whatever 
NAME    Date     
IYcrKG9pjt7mHH3qn 2016-01-05  44 
+0

спасибо jarad, вы босс –

1

Вы можете забыть свой мультииндекс, и просто использовать isin с sample:

import random 
df = df.reset_index() 
df[df['NAME'].isin(random.sample(list(df['NAME'].unique()),5))] 
+0

спасибо @maxymoo! просто вопрос. ваш код не делает то, что мне нужно? 'df ['NAME']. sample (5))' просто получает случайную 5-строчную выборку, которая может включать или не включать разные ИМЕНА. Вместо этого я хотел бы нарисовать одно имя из данных ... и, возможно, сохраняя структуру многоиндексности –

+0

, существует слишком много имен, и они не имеют смысла (скажем, IDigfvruhncfd7654). Следовательно, нужно получить один из них случайным образом. –

+1

Должен работать сейчас, я добавил в 'unique' – maxymoo

Смежные вопросы