如何基于行列位置列表筛选Python DataFrame的列特定行范围?
解决方法:按列提取指定行范围后合并
你可以通过遍历每列并提取对应行区间,再将结果拼接成新DataFrame的方式实现需求,df.filter确实不适用这个场景——它主要用于按标签过滤行/列,没法针对每列单独设置行范围。
具体代码实现
先构造你的示例数据:
import pandas as pd df = pd.DataFrame({ 'Index': [1, 2, 3], 'Column A': [2, 4, 1], 'Column B': [8, 9, 7] }).set_index('Index') first_position = [1, 2] # 每列的起始行号(对应原DataFrame的Index值) last_position = [2, 3] # 每列的结束行号
然后执行以下代码生成预期结果:
# 遍历每列,提取对应行范围后重置索引,再拼接 result = pd.concat( [df.loc[fp:lp][col].reset_index(drop=True) for col, fp, lp in zip(df.columns, first_position, last_position)], axis=1 ) # 设置输出的索引为1、2(和预期格式一致) result.index = range(1, len(result)+1)
代码说明
df.loc[fp:lp]:根据行标签(原DataFrame的Index值)提取指定行范围,对应示例中Column A取Index 1-2,Column B取Index 2-3.reset_index(drop=True):重置每列提取后的行索引,确保拼接时各行能对齐(否则Column B的索引会是2、3,和Column A的1、2无法匹配)pd.concat(..., axis=1):把处理后的各列按列方向拼接成新DataFrame
执行后得到的result就是你想要的预期输出。
内容的提问来源于stack exchange,提问作者Claudia Salat
相关产品推荐
相关产品推荐

