如何从Pandas DataFrame中提取间隔N行的交替连续行子集?
Pandas DataFrame交替N行切片的简便实现方法
针对你需要提取交替N行(比如每200行取前100行)的需求,不需要逐片合并,有两种简洁的实现方式:
方法一:布尔掩码法(推荐)
利用索引的模运算生成布尔掩码,快速筛选目标行:
import pandas as pd import numpy as np # 示例DataFrame(1000行) df = pd.DataFrame(np.arange(1000), columns=['data']) N = 100 # 每次要提取的行数 # 生成掩码:每2*N行周期内,保留前N行 mask = (df.index % (2 * N)) < N filtered_df = df[mask]
原理:将索引对2*N取模,余数小于N的行就是我们需要保留的部分,自动跳过中间的N行。如果总行数不是2*N的整数倍,最后不足一个周期的部分也会按规则处理(比如最后只剩150行,会保留前100行)。
方法二:索引拼接法
用numpy.r_直接拼接所有目标行的索引范围,再通过iloc提取:
import pandas as pd import numpy as np df = pd.DataFrame(np.arange(1000), columns=['data']) N = 100 # 生成所有要提取的切片范围,拼接成连续索引 target_indices = np.r_[[slice(i, i + N) for i in range(0, len(df), 2 * N)]] filtered_df = df.iloc[target_indices]
这种方式更直观,能清晰看到要提取的索引区间,适合需要明确控制切片范围的场景。
内容的提问来源于stack exchange,提问作者Phanish Chava
相关产品推荐
相关产品推荐

