我想在我的pandas数据框中更改许多值,这些数据指示列的索引的大小可能有所不同。

我需要比for循环还要快的东西,因为它将在很多行上完成,而且结果太慢了。

作为一个简单的例子,考虑一下

df = pd.DataFrame(np.zeros((5,5)))


现在,我想将此数据框中的某些值更改为1。想要更改前两列的第二行和fith行中的值,但是在第四行中,我想更改所有值,我希望这样的工作:

col_indices = np.array([np.arange(2),np.arange(5),np.arange(2)])


row_indices = np.array([1,3,4])


df.loc(row_indices,col_indices) =1


但是,这是行不通的(我怀疑这行不通,因为您选择的数据形状与数据框不一致)。

有没有更灵活的索引方式而不必遍历行等?

仅适用于类似范围的数组的解决方案(如上所述)也适用于我当前的问题-但一般的答案也很好。

谢谢你的帮助!

最佳答案

IIUC是一种方法。将列索引定义为您要在其中插入1s的列数以及要在其中插入它们的行数:

col_indices = np.array([2,5,2])
row_indices = np.array([1,3,4])
arr = df.values


并使用advanced indexing将感兴趣的单元格设置为1

arr[row_indices] = np.arange(arr.shape[0]) <= col_indices[:,None]

array([[0., 0., 0., 0., 0.],
       [1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [1., 1., 1., 1., 1.],
       [1., 1., 0., 0., 0.]])

10-07 13:28
查看更多