我有一个非常大的数据帧
in>> all_data.shape
out>> (228714, 436)
我想有效地将许多列相乘在一起。我从for循环和列列表开始——我发现最有效的方法是
from itertools import combinations
newcolnames=list(all_data.columns.values)
newcolnames=newcolnames[0:87]
#make cross products (the columns I want to operate on are the first 87)
for c1, c2 in combinations(newcolnames, 2):
all_data['{0}*{1}'.format(c1,c2)] = all_data[c1] * all_data[c2]
问题可能是我有87列,大约3800列(是的,这是我想要的)。我的jupyter笔记本和ipython shell都被这个计算搞得喘不过气来。我需要想出一个更好的方法来进行乘法运算。你知道吗
有没有更有效的方法来矢量化和/或处理?也许是使用numpy数组(我的数据帧已经过处理,现在只包含数字和nan,它是从分类变量开始的)。你知道吗
正如您在问题中提到的NumPy,这可能是一个可行的选择,特别是因为您可能希望在NumPy的2D空间中工作,而不是使用pandas进行1D列处理。首先,您可以通过调用
np.array
将数据帧转换为NumPy数组,如下所示-现在,您可以获得列ID的成对组合,然后索引到列中并执行逐列乘法,所有这些都将以矢量化的方式完成,如下所示-
样本运行-
最后,您可以使用propers列标题(如果需要)创建输出数据帧,如下所示-
您可以尝试
df.eval()
方法:相关问题 更多 >
编程相关推荐