Я переключаюсь с R на Python. К сожалению, я обнаружил, что хотя некоторые структуры работают почти мгновенно в R, они занимают несколько секунд (и даже минут) в Python. После прочтения я обнаружил, что циклы настоятельно не рекомендуются в pandas, и рекомендуются другие альтернативы, такие как векторизация и применение.
В этом примере кода: из столбца значений, отсортированных от минимального до максимального, сохраняйте все значения, которые идут первыми после пробела длины '200'.
import numpy as np
import pandas as pd
#Let's create the sample data. It consists of a column with random sorted values, and an extra True/False column, where we will flag the values we want
series = np.random.uniform(1,1000000,100000)
test = [True]*100000
data = pd.DataFrame({'series' : series, 'test':test })
data.sort_values(by=['series'], inplace=True)
#Loop to get rid of the next values that fall within the '200' threshold after the first next valid value
for i in data['series']:
if data.loc[data['series'] == i,'test'].item() == True:
data.loc[(data['series'] > i) & (data['series'] <= i+200 ) ,'test' ] = False
#Finally, let's keep the first values after any'200' threshold
data = data.loc[data['test']==True , 'series']
Можно ли превратить это в функцию, векторизовать, применить или любую другую структуру, отличную от 'for' l * 1010? * заставить его работать почти мгновенно?