如何使用存储在两个列表/向量/系列中的“类坐标”索引更改数据框单元格值?

如果之前有人问过,请道歉,不知怎的,我无法找到答案.

假设我有两个值列表:

rows = [0,1,2]
cols = [0,2,3]

它分别代表行和列的索引.这两个列表在矩阵中组合了符号的坐标,即(0,0),(1,2),(2,3).

我想使用这些坐标来更改数据帧的特定单元格而不使用循环.

在numpy中,这是微不足道的:

data = np.ones((4,4))
data[rows, cols] = np.nan

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

但在pandas中,我似乎陷入了一个循环:

df = pd.DataFrame(np.ones((4,4)))
for _r, _c in zip(rows, cols): 
    df.iat[_r, _c] = np.nan

有没有办法用于列出类似坐标索引的向量来直接修改pandas中的单元格?

请注意,答案不是使用iloc,而是选择整个行和列的交集.

最佳答案
非常简单!利用pandas建立在numpy之上并使用DataFrame.values这一事实

df.values[rows, cols] = np.nan

输出:

     0    1    2    3
0  NaN  1.0  1.0  1.0
1  1.0  1.0  NaN  1.0
2  1.0  1.0  1.0  NaN
3  1.0  1.0  1.0  1.0

转载注明原文:如何使用存储在两个列表/向量/系列中的“类坐标”索引更改数据框单元格值? - 代码日志