如何基于索引Series批量设置DataFrame指定位置的值(无需循环)
解决方法:无需遍历精准设置指定单元格值
没问题!你遇到的问题是因为df.loc[s]的用法不对——它会把Series s的值当成行标签来选中整行,而不是精准定位单个单元格。要实现无需遍历的精准赋值,咱们可以用NumPy的高级索引来直接定位目标元素,具体操作如下:
获取列名对应的索引位置
先把Seriess中的列名(A、B、C)转换成DataFrame对应的列索引位置:col_indices = df.columns.get_indexer(s.index)执行后会得到
array([0, 1, 2]),分别对应A、B、C三列在DataFrame中的位置。精准赋值目标单元格
用Seriess的值作为行索引,配合上面得到的列索引,直接对DataFrame的底层数值数组赋值:df.values[s.values, col_indices] = 'spam'
这样就能一次性设置(3,A)、(0,B)、(4,C)这三个位置的值为'spam',完全不需要遍历Series。
验证结果
执行完上述代码后,你的DataFrame会变成期望的样子:
A B C 0 0.10 spam 0.07 1 0.40 0.30 0.30 2 0.70 0.17 0.13 3 spam 0.04 0.24 4 0.15 0.07 spam
内容的提问来源于stack exchange,提问作者Aaron Brock
相关产品推荐
相关产品推荐

