【发布时间】:2017-04-04 02:52:39
【问题描述】:
import pandas as pd
import numpy as np
我有一个数据框:
my_df = pd.DataFrame({'target': [0 ,0 ,0 ,0 , 300, 400, 500, 600, 0],
'class' : [0 ,0 ,0 ,0 , 1, 1, 1, 1, 0],
'feature':[12 ,13 ,13 ,200 , 900, 800, 600, 600, 12]})
我有一个生成索引更新集的过程,表示为一对列表:
update_index = [0 , 1, 2, 3, 8]
update_values = [20, 25, 25, 150, 25]
或者,我可以将这些表示为元组列表:
update_tuples = [(0,20), (1,25), (2,25), (3,150), (8,25)]
或者,理想情况下,我希望能够将它们表示为一对 numpy 数组 - 因为这更有可能是我生成它们的形式。
update_index_array = np.array([0 , 1, 2, 3, 8])
update_values_array = np.array([20, 25, 25, 150, 25])
除了表达式选项之外,我找到了一种方法,可以在我的索引集中指定的位置使用我的值集中的值更新我的数据框,这很有效,但它有点慢(而且丑陋!)。
[my_df.set_value(i,'target',v) for i,v in update_tuples]
这是一个问题,因为在我的真实示例中,我有成千上万(数百万?)的更新要执行。
我想找到的是某种 numpy 加速的单次更新(即没有列表理解),它将更新放到适当的目标位置,而不会覆盖非索引位置中的现有值.
有什么想法吗?
【问题讨论】: