You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于滑块选择的月份在Pandas DataFrame中筛选固定6行数据

基于选中月份筛选连续6行Pandas数据

问题场景

现有包含function、service、month三列的Pandas DataFrame,月份覆盖1-12月。通过滑块选择一个月份(对应变量var),需要筛选出始终包含该选中月份的6行连续数据,选中月份可位于结果的开头、中间或末尾。

用户提供的DataFrame构造代码:

import pandas as pd
data = {
  "function": ["test1","test2","test3","test4","test5","test6","test7","test8","test9","test10","test11","test12"],
   "service": ["A", "B", "AO", "M" ,"A", "PO", "MP", "YU", "Z", "R", "E", "YU"],
  "month": ["January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
}
df = pd.DataFrame(data)

DataFrame示例输出:

function service      month
0     test1       A    January
1     test2       B   February
2     test3      AO      March
3     test4       M      April
4     test5       A        May
5     test6      PO       June
6     test7      MP       July
7     test8      YU     August
8     test9       Z  September
9    test10       R    October
10   test11       E   November
11   test12      YU   December

用户尝试的无效代码:

def selectDataRange(var:str,df):
    if var=="January":
        df.iloc[0: 6,]
    if var=="February":
        df.iloc[1: 6,]
    if var=="March":
        df.iloc[2: 6,]

问题分析

上述无效代码存在三个核心问题:

  • 函数无return语句,执行后不会返回筛选结果;
  • 切片逻辑错误,例如选中February时,iloc[1:6]仅返回5行,不符合6行的要求;
  • 未处理选中月份靠近DataFrame末尾的情况,会导致切片长度不足或索引越界。

解决方案

通过定位目标月份索引→计算合法切片范围→返回结果的逻辑实现需求,确保始终返回包含目标月份的6行数据:

def selectDataRange(var: str, df):
    # 获取选中月份对应的行索引
    target_idx = df[df['month'] == var].index[0]
    # 初始计算起始索引,优先让目标月份处于结果中间位置
    start = max(0, target_idx - 2)
    end = start + 6
    # 若结束索引超出DataFrame长度,调整为从末尾向前取6行
    if end > len(df):
        end = len(df)
        start = end - 6
    # 返回切片后的结果
    return df.iloc[start:end]

逻辑说明

  1. 定位索引:通过df[df['month'] == var].index[0]精准获取选中月份对应的行索引;
  2. 计算切片范围:
    • 优先让目标月份处于结果的中间位置(向前取2行,向后取3行);
    • 若起始索引小于0,则从第0行开始;
    • 若结束索引超出DataFrame总长度,则从末尾向前取6行,保证结果始终为6行;
  3. 返回结果:通过iloc切片返回最终筛选数据。

测试示例

  • 选中January(索引0):返回0-5行,包含目标月份;
  • 选中April(索引3):返回1-6行,目标月份处于结果中间;
  • 选中December(索引11):返回6-11行,目标月份处于结果末尾。

内容的提问来源于stack exchange,提问作者user29295031

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:20:03