python - 提高非常大的数据帧上的迭代性能

标签 python pandas dataframe iteration list-comprehension

我有一个 pandas 数据框,由 300 万行和 50 列组成,全部包含整数(正数或负数)。我想创建一个名为“feature”的新列,它从 50 个现有列中获取最大的负数。

例如,如果对于给定行,50 列包含值

-25,-24,-23,...,-1,1,...,23,24,25

“feature”列应返回 -1。

由于我的数据框太大,我尝试过的解决方案花费的时间太长。例如,我尝试过使用列表推导式,但因为我求助于 iterrows(),它太慢了(itertuples() 的性能并没有明显提高):

import numpy as np
import pandas as pd
from tqdm import tqdm

df = pd.read_csv('name_of_file.csv')

for idx, row in tqdm(df[list(np.arange(0,50,1))].iterrows()):
    df.loc[idx, 'feature'] = max([n for n in row if n < 0])

对于如此大的数据帧计算此功能的最快方法是什么,而无需诉诸线程?

最佳答案

您可以使用 DataFrame.where0 以上的所有值设置为 NaN 并返回按行 max >:

df['feature'] = df.iloc[:,:50].where(df.iloc[:,:50].lt(0)).max(1)

关于python - 提高非常大的数据帧上的迭代性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57073937/

相关文章:

python - 有没有办法修改传递给seaborn中facetgrid的数据帧?

python - 有效地获得 Pandas 指数的联合

arrays - 使用不同的阈值替换多列中的值

python - pandas 中 lambda 函数的正确使用

python - 如何将推文 ID 作为字符串写入 CSV 文件

python - 在一张图中同时绘制两个截面强度

r - 使用r包 'flextable'将多个表格导出到word文档

python - 更改 DataFrame 中的 NaN 值

python - 如何使用 pack 将一个小部件放在并排的小部件下面?

python - 打包 Python egg 时如何排除 .gitignore 中的文件?