python - Python'for'循环性能太慢
问题描述
我的数据框中有超过 500,000 行和许多类似的“for”循环,这导致我的代码需要一个多小时才能完成计算。是否有更有效的方法来编写以下“for”循环,以便运行得更快:
col_26 = []
col_27 = []
col_28 = []
for ind in df.index:
if df['A_factor'][ind] > df['B_factor'][ind]:
col_26.append('Yes')
col_27.append('No')
col_28.append(df['A_value'][ind])
elif df['A_factor'][ind] < df['B_factor'][ind]:
col_26.append('No')
col_27.append('Yes')
col_28.append(df['B_value'][ind])
else:
col_26.append('')
col_27.append('')
col_28.append(float('nan'))
解决方案
尝试列操作:
data = {'A_factor': [1, 2, 3, 4, 5],
'A_value': [10, 20, 30, 40, 50],
'B_factor': [2, 3, 1, 2, 6],
'B_value': [11, 22, 33, 44, 55]}
df = pd.DataFrame(data)
df['col_26'] = ''
df['col_27'] = ''
df['col_28'] = np.nan
mask = df['A_factor'] > df['B_factor']
df.loc[mask, 'col_26'] = 'Yes'
df.loc[~mask, 'col_26'] = 'No'
df.loc[mask, 'col_28'] = df[mask]['A_value']
df.loc[~mask, 'col_27'] = 'Yes'
df.loc[mask, 'col_27'] = 'No'
df.loc[~mask, 'col_28'] = df[~mask]['B_value']
推荐阅读
- php - 将 python 中的 SSL 套接字迁移到 PHP
- openssh - Cannot start openssh in Windows Server 2016
- c# - 如何将具有多个客户数据的主 SQL Server 数据库同步到单个客户数据库
- html - how to render a HTML template through django REST APIView?
- php - How to create the multi-level url in Codeigniter?
- r - 使用无头 phantomjs 浏览器在 Raspberry pi 上运行 RSelenium
- mysql - 如何隔离 Galera 节点进行更新?
- mysql - 如何更改我在 INNER JOIN 后收到的列的名称
- node.js - 当 grunt build 正在执行时,如何在 jenkins 作业中通过 bower.json 克隆 gitlab 存储库?
- javascript - 有没有办法在 MapView.animateToRegion 方法停止后调用函数