当前位置: 首页 > 知识库问答 >
问题:

熊猫应用功能行明智地花了太长的时间,下面的代码有什么替代方法[重复]

谭嘉容
2023-03-14

我有一个数据框和如下所示的大函数,我想将norm_group函数应用于数据框列,但使用apply命令花费了太多时间。有没有办法缩短这段代码的时间?目前每个环路需要24.4秒。

import pandas as pd
import numpy as np

np.random.seed(1234)
n = 1500000

df = pd.DataFrame()
df['group'] = np.random.randint(1700, size=n)
df['ID'] = np.random.randint(5, size=n)
df['s_count'] = np.random.randint(5, size=n)
df['p_count'] = np.random.randint(5, size=n)
df['d_count'] = np.random.randint(5, size=n)
df['Total'] = np.random.randint(400, size=n)
df['Normalized_total'] = df.groupby('group')['Total'].apply(lambda x: (x-x.min())/(x.max()- x.min()))
df['Normalized_total'] = df['Normalized_total'].apply(lambda x:round(x,2))

def norm_group(a,b,c,d,e):
if a >= 0.7 and b >=1000 and c >2:
    return "Both High "
elif a >= 0.7 and b >=1000 and c < 2:
    return "High and C Low"
elif a >= 0.4 and b >=500 and d > 2:
    return "Medium and D High"
elif a >= 0.4 and b >=500 and d < 2:
    return "Medium and D Low"
elif a >= 0.4 and b >=500 and e > 2:
    return "Medium and E High"
elif a >= 0.4 and b >=500 and e < 2:
    return "Medium and E Low"
else:
    return "Low"

%timeit df['Categery'] = df.apply(lambda x:norm_group(a=x['Normalized_total'],b=x['group']), axis=1)

每循环24.4 s±551 ms(平均±std. dev.7次运行,每次1次循环)

在我的原始数据框中有多个文本列,我希望应用类似的函数,与此函数相比,它需要花费更多的时间。

谢谢

共有1个答案

苗康平
2023-03-14

您可以使用np进行矢量化。选择

df['Category'] = np.select((df['Normalized_total'].ge(0.7) & df['group'].ge(1000),
                            df['Normalized_total'].ge(0.4) & df['group'].ge(500)),
                           ('High', 'Medium'), default='Low'
                          )

性能:

255 ms ± 2.71 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

 类似资料:
  • 我试图提取顶级URL并忽略路径。我使用的代码如下: 这个脚本已经运行了一个小时了。当我运行它时,它给出了以下警告: 如果有人能给我一个更快的建议,我将不胜感激,也许是“警告”建议的方法

  • 从该数据帧开始: 有一些缺失的值。我试图以行方式应用替换函数,例如在伪代码中: 我知道我可以做一些事情,比如: 函数定义如下: 获得: 但是先验地,我不知道字符串在列中的实际位置,所以我必须使用类似于的方法进行搜索,但要按行搜索。 编辑:每个字符串都可以出现在列中的任何位置。

  • 这只是我的代码中的示例数据。我想规范化其他列中的合计列。目前我有大约2000个小组,正常化和fgroup需要15分钟。 减少时间的方法有哪些。 谢谢

  • 开始在Android Studio v1.2.1中构建一个基本的Hello World应用程序 Gradle Build花费了太多的时间来构建和运行应用程序。 有人能说出原因,3Q

  • 我在第5行得到一个错误,上面说“未处理的异常IOException,InvalidFormatException”

  • 我正在尝试训练一个模型,在我看来,与其他数据集相比,该模型花费的时间太长,因为完成一个历元需要大约1小时和20分钟。我认为问题是因为数据集没有存储在ram上,但我不确定这一点。 代码如下: 型号: 顺序模型 2个卷积层,32个神经元,激活=relu 1个卷积层,64个神经元,激活=relu 平整和致密层,激活=relu 退出0.5 具有sigmoid激活的输出层(致密) Adam optimize