2016-10-05 34 views
5

mam ramki danych w kolumnie tfidf_sorted następująco:Pandy: uzyskać pierwsze 10 elementy serii

tfidf_sorted 

0 [(morrell, 45.9736796), (football, 25.58352014... 
1 [(melatonin, 48.0010051405), (lewy, 27.5842077... 
2 [(blues, 36.5746634797), (harpdog, 20.58669641... 
3 [(lem, 35.1570832476), (rottensteiner, 30.8800... 
4 [(genka, 51.4667410433), (legendaarne, 30.8800... 

W type(df.tfidf_sorted) powraca pandas.core.series.Series.

Kolumnę utworzony w następujący sposób:

df['tfidf_sorted'] = df['tfidf'].apply(lambda y: sorted(y.items(), key=lambda x: x[1], reverse=True)) 

gdzie tfidf jest słownik.

Jak uzyskać pierwsze 10 par klucz-wartość od tfidf_sorted?

+0

To bardzo unidiomatic sposób korzystania pandy. Dlaczego warto przechowywać listy w serii? Dlaczego nie używać kolumn w DataFrame? – Maximilian

+0

Pewnie, też tak myślałem. Czy mógłbyś zaproponować alternatywną metodę? –

+0

Każda z tych kolumn (tj. Pierwsza to "morrell", "melatonina" itd.) W rzeczywistej kolumnie w DataFrame? – Maximilian

Odpowiedz

2

IIUC można użyć:

from itertools import chain 

#flat nested lists 
a = list(chain.from_iterable(df['tfidf_sorted'])) 
#sorting 
a.sort(key=lambda x: x[1], reverse=True) 
#get 10 top 
print (a[:10]) 

Lub jeśli trzeba top 10 w rzędzie dodać [:10]:

df['tfidf_sorted'] = df['tfidf'].apply(lambda y: (sorted(y.items(), key=lambda x: x[1], reverse=True))[:10]) 
+0

Dzięki! Druga odpowiedź zadziałała. Potrzebuję zaimportować bibliotekę? –

+0

Tak, dodaję to do odpowiedzi, ale pierwsza odpowiedź zwraca 10 najlepszych wartości we wszystkich wierszach – jezrael

+0

Dzięki. Druga odpowiedź jest tym, czego szukałem. –