【发布时间】:2020-04-13 20:35:37
【问题描述】:
我正在尝试降低以下问题的速度性能。我有一个数组,例如:
list1 = [0.564,0.011,0.560,-1.100,0.344,0.912,-0.983]
list2 = [0.0,1.0,1.0,0.0,0.0,0.0,-1.0]
list3 = [0.760,0.013,-0.580,1.120,0.144,-0.929,0.833]
list4 = [-1.0,1.0,0.0,1.0,0.0,0.0,1.0]
test_arr = np.column_stack((list1, list2,list3,list4))
这给出了:
我将始终有一列不同的浮点数(让我们将这些列称为“random_numbers”),然后是另一列仅包含 -1.0、0.0 和 1.0 值的组合(让我们将这些列称为“ones_zeros”)。
最终目标是将任何 -1.0 或 1.0(注意:不是 0.0)值替换为紧靠左边的值。对于此示例,输出将是:
目前,我正在将 numpy 数组转换为 pandas 并应用以下函数:
def replace_values(test_arr_df,random_numbers,ones_zeros):
for cc in range(len(random_numbers)):
test_arr_df[ones_zeros[cc]] = test_arr_df.apply(
lambda row: row[random_numbers[cc]] if row[ones_zeros[cc]]==1 or row[ones_zeros[cc]]==-1
else row[ones_zeros[cc]],axis=1
)
return test_arr_df
将其应用于我们的测试用例:
#Convert to dataframe
test_arr_df=pd.DataFrame(test_arr)
#Tell the function what is a variable column and what is a minmax column
variable_columns = [0,2]; minmax_columns = [1,3]
#Replace values
res_df = replace_values(test_arr_df,variable_columns,minmax_columns)
这个 pandas 方法有效,给出的结果与上面的示例输出相同。但是,它非常缓慢。在我的代码的其他部分,我通过保留 numpy 数组而不是切换到 pandas 成功地减少了处理时间,但我在这里没有成功。
所以,我的问题是,有没有办法使用 numpy 而不是 pandas 来做到这一点?或者也许是使用熊猫的更快方法?我无法在这方面取得进展,因为我经常索引错误的部分或无法替换正确的行/列。谢谢!
【问题讨论】:
标签: python arrays pandas numpy indexing