Эффективность времени за счет исключения трех петель - PullRequest
0 голосов
/ 12 мая 2018

У меня есть скрипт, похожий на этот:

import random
import pandas as pd

FA = []
FB = []
Value = []
df = pd.DataFrame()
df_save = pd.DataFrame(index=['min','max'])
days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
numbers = list(range(24))   # FA.unique()
mix = '(pairwise combination of days and numbers, i.e. 0Monday,0Tuesday,...1Monday,1Tuesday,....)' 'I dont know how to do this combination btw'

def Calculus():
    global min,max
    min = df['Value'][boolean].min()
    max = df['Value'][boolean].max()

for i in range(1000):
    FA.append(random.randrange(0,23,1))
    FB.append(random.choice(days))
    Value.append(random.random())

df['FA'] = FA
df['FB'] = FB
df['FAB'] = df['FA'].astype(str) + df['FB'].astype(str)
df['Value'] = Value

mix_factor = df['FA'].astype(str) + df['FB'].astype(str)

for i in numbers:
    boolean = df['FA'] == i
    Calculus()
    df_save[str(i)] = [min,max]

for i in days:
    boolean = df['FB'] == i
    Calculus()
    df_save[str(i)] = [min,max]

for i in mix_factor.unique():
    boolean = df['FAB'] == i
    Calculus()  #
    df_save[str(i)] = [min,max]

Мой вопрос: есть ли другой способ сделать то же самое, но более эффективно? Мои реальные данные (в данном случае df) - это CSV с миллионами строк, и эти три цикла берутся навсегда. Может быть, использовать «применить», но я никогда не работал с ним раньше.

Любое понимание будет очень признателен, спасибо.

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете поместить все три цикла в один, в зависимости от того, какой у вас точный код. Есть ли параметр для исчисления? Если нет, то их объединение позволит вам запустить Calculus () меньше

...