pracuję z następującymi danymi Panel w MultiIndex
pand DataFrame
zwanych df_data
:próbkowania od MultiIndex 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
indeksy indywidualnej (istnieją 500 z nich), t
indeksuje czasu. To zrównoważony panel. Chciałbym utworzyć losową próbkę z nn=100
osób z wymianą. Ponadto, jeśli dana osoba trafi do próbki losowej, wówczas wszystkie 4-krotne obserwacje (t = 0,1,2,3) dla tej osoby powinny zostać przypisane do próbki.
Poniższa linia robi prawie co chcę:
df_sample = df_data.loc[np.random.randint(3, size=100).tolist()]
jednak nie spróbować osobnika wielokrotnie. Jeśli więc utworzona lista zmiennych losowych to [2, 3, 2, 4, 1, ...], wówczas trzecia osoba (indeks = 2 to trzecia osoba) jest wybrana tylko raz, a nie dwa razy w próbce losowej. Oznacza to, że jak tylko losowy wektor powyżej zawiera tę samą osobę więcej niż raz, w losowej próbce kończę z mniej niż 100 osobnikami (z 4 obserwacjami czasowymi). Próbowałem także funkcji df_data.sample
, ale nie wydaje mi się być w stanie obsłużyć określonego wielopoziomowego indeksu mam tutaj w panelu. Mógłbym napisać różnego rodzaju pętle, aby to zrobić, ale myślałem, że powinien być prostszy (i szybszy) sposób robienia tego. Jestem na Pythonie 3.5 i używam wersji Pand w wersji 0.17.1. Dzięki.
Możliwy duplikat [Jak dostać losowy (Bootstrap) próbki z pandas multiindex] (http://stackoverflow.com/questions/38731858/how-to-get-a-random-bootstrap-sample-from-pandas-multiindex) – maxymoo