Я работаю со следующими данными панели в MultiIndex
пандах DataFrame
называемых df_data
:Отбор пробы из мультииндексного DataFrame
y x
n time
0 0 0.423607 -0.307983
1 0.565563 -0.333430
2 0.735979 -0.453137
3 0.962857 1.671106
1 0 0.772304 1.221366
1 0.455327 -1.024852
2 0.864768 0.609867
3 0.334429 -2.567936
2 0 0.435553 -0.259228
1 0.221501 0.484677
2 0.773628 0.650288
3 0.293902 0.566452
n
индексы физического лица (есть 500 из них), t
индексов времени. Это сбалансированная панель. Я хотел бы создать случайный образец nn=100
особей с заменой. Кроме того, если индивид превращает его в случайную выборку, все четыре временных наблюдения (t = 0,1,2,3) для этого человека должны быть отнесены к образцу.
Следующая строка делает почти то, что я хочу:
df_sample = df_data.loc[np.random.randint(3, size=100).tolist()]
Однако, это не образец индивидуума неоднократно. Поэтому, если созданный список случайных величин, скажем, [2, 3, 2, 4, 1, ...], то третий индивидуум (индекс = 2 является третьим индивидуумом) выбирается только один раз, а не дважды в случайную выборку. Это означает, что, как только случайный вектор выше содержит одного и того же человека более одного раза, я получаю менее 100 человек (с 4 наблюдениями времени каждый) в случайной выборке. Я также пробовал функцию df_data.sample
, но, похоже, я не могу справиться с конкретным многоуровневым индексом, который у меня здесь, на панели. Я мог написать все виды циклов, чтобы это сделать, но я думал, что должен быть более простой (и более быстрый) способ сделать это. Я на Python 3.5, и я использую версию pandas 0.17.1. Спасибо.
Возможный дубликат [Как получить случайную (Bootstrap) образца из pandas multiindex] (http://stackoverflow.com/questions/38731858/how-to-get-a-random-bootstrap-sample-from-pandas-multiindex) – maxymoo