2013-04-10 19 views
51

Czy istnieje sposób wybierania losowych wierszy z DataFrame w Pandach.Losowy wybór wierszy w ramce danych Pandy

W R, używając pakietu samochodowego, znajduje się przydatna funkcja some(x, n), która jest podobna do głowy, ale wybiera w tym przykładzie 10 wierszy losowo z x.

Zajrzałem także do dokumentacji przekrojów i wydaje się, że nie ma nic podobnego.

Aktualizacja

Teraz za pomocą wersji 20. Istnieje metoda próbki.

df.sample(n)

Odpowiedz

31

coś takiego?

import random 

def some(x, n): 
    return x.ix[random.sample(x.index, n)] 
+3

Dzięki @umumiro. Dowiedziałem się również, że 'df.ix [np.random.random_integers (0, len (df), 10)] również będzie działał. – John

+6

Jeśli chcesz używać numpy, możesz również zrobić "df.ix [np.random.choice (df.index, 10)]". – naught101

+4

Ktoś w innym poście wspomnieć, że 'np.random.choice' jest dwa razy tak szybko, jak' random.sample' – Phani

2

Właściwie to daje powtórzony Indeksy np.random.random_integers(0, len(df), N) gdzie N jest duża liczba.

5

Najlepszym sposobem na to jest z funkcją próbki z modułu losowej zrobić,

import numpy as np 
import pandas as pd 
from random import sample 

# given data frame df 

# create random index 
rindex = np.array(sample(xrange(len(df)), 10)) 

# get 10 random rows from df 
dfr = df.ix[rindex] 
98

Z pandy wersji 0.16.x, istnieje obecnie DataFrame.samplemethod built-in:

import pandas 

df = pandas.DataFrame(data) 

# Randomly sample 70% of your dataframe 
df_0.7 = df.sample(frac=0.7) 

# Randomly sample 7 elements from your dataframe 
df_7 = df.sample(n=7) 

Dla obu podejścia powyżej , możesz uzyskać pozostałe wiersze, wykonując:

df_rest = df.loc[~df.index.isin(df_0.7.index)] 
+0

Dzięki za wskazanie, że @ryanjdillon. Nie zauważyłem tego. – John

+5

@ryanjdillon WOW !! dzięki za sposób zdobycia pozostałych wierszy –

0

W poniższym wierszu losowo wybierzesz liczbę n wierszy spośród wszystkich istniejących numerów wierszy z ramki danych df bez wymiany.

df=df.take(np.random.permutation(len(df))[:n])

Powiązane problemy