【发布时间】:2015-12-22 23:34:23
【问题描述】:
我有一个数据框,我想用数组中的一些值更新一列。然而,该数组与数据帧的长度不同,但我有要更新的数据帧行的索引。
我可以通过循环遍历行(如下)来做到这一点,但我希望有一种更有效的方法可以通过矢量化方法来做到这一点,但我似乎无法获得正确的语法。
在下面的示例中,我只是用nan 填充列,然后通过循环直接使用索引。
df['newcol'] = np.nan
j = 0
for i in update_idx:
df['newcol'][i] = new_values[j]
j+=1
【问题讨论】:
-
这是一个数组还是一个系列/df?您可以直接分配系列:
df['newcol'] = new_values或构造一个系列:df['newcol'] = pd.Series(new_values)new_values中的额外行将被忽略 -
要更新的值当前位于数组中,但如果解决方案需要,可以进行转换。也许我错了,但您的解决方案不会忽略我只想更新某些索引的事实吗?例如,我可能想更新第 2、第 8、第 20 .. 索引(在示例中这些在 update_idx 中),但您的方法不会只更新数据帧的前 N 行(其中 N 是 new_values 的长度) ?
-
那么我认为
df.loc[update_idx, 'new_col'] = new_values应该可以工作 -
完美 - 非常感谢。如果您愿意将其作为答案提交,我可以接受!
标签: python pandas vectorization