我想在我的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.]])