2016-06-01 7 views
2

Ich habe derzeit ein Pandas Series-Objekt, wobei der Indexname ein Begriff im Dokument ist, und der Wert ist, wie oft der Begriff im Dokument aufgetreten ist. Ein Beispiel ist unten dargestellt:Konvertieren von Dokument-Term-Anzahl in Pandas-Serie in eine Python-Liste

>>> import pandas as pd 
>>> s = pd.Series([1, 4, 1, 2], index=["green", "blue", "red", "yellow"]) 
>>> print s 
    green  1 
    blue  4 
    red  1 
    yellow 2 
    dtype: int64 

Mein Ziel ist es, eine Liste von Indexnamen zu erstellen, und jeder Index Name wird in der Liste so oft wie ihr Wert enthält. Der ideale Ausgang ist unten dargestellt:

terms = ["green", "blue", "blue", "blue", "blue", "red", "yellow", "yellow"] 

Mein aktueller Code ist folgend:

termList = list() 
termCount = zip(s.index, s.values) 
for name, cnt in termCount: 
    termList += [name]*cnt 

ich die richtige Ausgabe zu erhalten, aber ich glaube nicht, dass diese Methode sehr pythonic ist. Kann jemand Tipps geben, wie man es verbessern kann?

Antwort

3

Do it NumPy verwenden, keine explizite Schleife:

>>> np.repeat(s.index.values, s.values) 
array(['green', 'blue', 'blue', 'blue', 'blue', 'red', 'yellow', 'yellow'], dtype=object)