【问题标题】:Time efficiency by eliminating three for loops通过消除三个 for 循环来提高时间效率
【发布时间】:2018-05-12 00:35:23
【问题描述】:

我有一个类似这样的脚本:

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,这三个循环将永远持续下去。 也许使用“应用”,但我以前从未使用过它。

任何见解将不胜感激,谢谢。

【问题讨论】:

  • 你需要profile你的代码才能知道哪个方法占用的时间最多。
  • @RafaelC 我会编辑我的帖子
  • @LuisMuñoz 我会尝试,但我知道这三个 for 循环大部分时间都在消耗

标签: python python-3.x performance pandas apply


【解决方案1】:

您可以将所有三个循环合二为一,具体取决于您的确切代码。微积分有参数吗?如果没有,将它们合二为一将使您不必运行 Calculus() 更少

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多