2017-02-01 8 views
1

Ich habe eine Funktion geschrieben, die eine Pandas-Reihe (von Gleitkommazahlen oder ganzen Zahlen) nimmt, sie sortiert und dann für jedes Glied x den Anteil der Werte in der Reihe größer als x berechnet. Ich Timing Dinge mit tqdm.Wie kann ich diese Pandas-Anwendung beschleunigen?

import pandas as pd 
from tqdm import tqdm, tqdm_pandas 
tqdm.pandas() 

def my_func(data): 
    data.sort_values(inplace=True) 
    n = len(data) 
    # return data.apply(lambda x: len(data[data > x])/n) # if not using tdqm 
    return data.progress_apply(lambda x: len(data[data > x])/n) 

Dies dauert mehrere Minuten, um auf einer Reihe mit ~ 300000 Reihen zu laufen. Gibt es etwas, was ich tun könnte, um es zu beschleunigen?

Antwort

0

Verwendung DataFrame.rank:

data = pd.DataFrame(np.arange(5)) 
data.rank(pct=True) 

kehrt

0 0.2 
1 0.4 
2 0.6 
3 0.8 
4 1.0 
Verwandte Themen