如何为Pandas索引子集生成布尔掩码实现指定行数据修改
实现方法
直接用Pandas索引自带的Index.isin()生成布尔掩码就行,是最简洁也最符合Pandas设计习惯的写法:
m = df.index.isin(s)
完整测试代码:
import pandas as pd df = pd.DataFrame(index=["a", "b", "c"], data={"col": [1, 2, 3]}) s = ["a", "b"] m = df.index.isin(s) df.loc[m, "col"] = [10, 11]
运行后df的输出完全符合预期:
col a 10 b 11 c 3
这个写法的优势
- 纯向量化实现,没有循环开销,数据量大的时候性能远好于逐行判断、列表推导等写法
- 自动对齐原DataFrame的行顺序,不会因为子集
s的顺序和原索引顺序不一致导致赋值错位 - 容错性好,如果
s里混入了原df不存在的索引,会自动忽略,不会报错也不会产生脏赋值 - 语义清晰,读过代码就能立刻明白是要筛选索引在s中的行,维护成本低
内容的提问来源于stack exchange,提问作者GlaceCelery
相关产品推荐
相关产品推荐

