我有一个 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.where
将 0
以上的所有值设置为 NaN
并返回按行 max
>:
df['feature'] = df.iloc[:,:50].where(df.iloc[:,:50].lt(0)).max(1)
关于python - 提高非常大的数据帧上的迭代性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57073937/