gpt4 book ai didi

python - 减少 python 中的循环时间

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:39 25 4
gpt4 key购买 nike

python 中的循环需要很长时间才能给出结果。这包含大约 10 万条记录。

这需要很多时间。如何减少时间

df['loan_agr'] = df['loan_agr'].astype(int)

for i in range(len(df)):

if df.loc[i,'order_mt']== df.loc[i,'enr_mt']:

df['new_N_Loan'] = 1

df['exist_N_Loan'] = 0

df['new_V_Loan'] = df['loan_agr']

df['exist_V_Loan'] = 0

else:

df['new_N_Loan'] = 0

df['exist_N_Loan'] = 1

df['new_V_Loan'] = 0

df['exist_V_Loan'] = df['loan_agr']

最佳答案

您可以使用 loc 并以矢量化方式设置新值。这种方法比使用迭代快得多,因为这些操作是一次对整个列执行的,而不是对单个值执行的。查看this article有关 pandas 速度优化的更多信息。

例如:

mask = df['order_mt'] == df['enr_mt']
df.loc[mask, ['new_N_Loan', 'exist_N_Loan', 'exist_V_Loan']] = [1, 0, 0]
df.loc[mask, ['new_V_Loan']] = df['loan_agr']

df.loc[~mask, ['new_N_Loan', 'exist_N_Loan', 'new_V_Loan']] = [0, 1, 0]
df.loc[~mask, ['exist_V_Loan']] = df['loan_agr']

编辑:

如果您的 pandas 版本不支持 ~(按位非)运算符,您可以为“else”条件创建一个新掩码,类似于第一个条件。

例如:

mask = df['order_mt'] == df['enr_mt']
else_mask = df['order_mt'] != df['enr_mt']

然后为第二组定义使用 else_mask 而不是 ~mask

示例:

输入:

   order_mt  enr_mt new_N_Loan exist_N_Loan exist_V_Loan new_V_Loan  loan_agr
0 1 1 None None None None 100
1 2 2 None None None None 200
2 3 30 None None None None 300
3 4 40 None None None None 400

输出:

   order_mt  enr_mt  new_N_Loan  exist_N_Loan  exist_V_Loan  new_V_Loan  loan_agr
0 1 1 1 0 0 100 100
1 2 2 1 0 0 200 200
2 3 30 0 1 300 0 300
3 4 40 0 1 400 0 400

关于python - 减少 python 中的循环时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com