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

问题描述

抱歉,如果以前有人问过这个问题,不知何故我无法找到答案。

假设我有两个值列表:

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

分别表示行和列的索引。这两个列表组合了矩阵中的坐标类型,即(0,0)、(1,2)、(2,3)。

我想使用这些坐标来更改特定单元格dataframe而不使用循环。

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

但是在熊猫中,我似乎陷入了一个循环:

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

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


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

标签: pythonpandas

解决方案


非常简单!利用 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

推荐阅读