如何实现Python中双冒号索引[::3]的逆选操作?
实现双冒号索引的逆操作(保留原顺序)
针对你需要获取DF[::3]之外所有行且保持原顺序的需求,有两种简单可靠的实现方式:
方法一:布尔掩码反选
通过生成布尔掩码标记需要保留的行,直接筛选即可维持原顺序:
# 创建掩码:索引对3取余不等于0的行(即排除[::3]选中的行) mask = ~(DF.index % 3 == 0) # 筛选得到目标数据 result = DF[mask]
原理:DF.index % 3 == 0会选中所有第0、3、6...行(也就是DF[::3]的行),~符号对布尔值取反,就能得到所有未被选中的行的标记,用这个掩码筛选后会严格保留原数据的行顺序。
方法二:删除选中的行
先获取DF[::3]的索引,再通过drop方法删除这些行,剩余行自然保持原顺序:
# 获取需要删除的行索引 drop_indices = DF[::3].index # 删除索引对应的行,得到目标数据 result = DF.drop(drop_indices)
这个方法逻辑直观,直接移除不需要的行,不会改变剩余行的排列顺序。
注意:避免用分片拼接的方式
如果你尝试用DF[1::3].append(DF[2::3])这类方式,会先取所有第1、4、7...行,再取第2、5、8...行,最终数据的顺序会被打乱,不符合需求。上面两种方法都能完美解决顺序问题。
内容的提问来源于stack exchange,提问作者tesla john
相关产品推荐
相关产品推荐

