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

如何使用Pandas根据选中月份筛选有序的6行数据?

解决方案

你的核心需求是获取包含选中月份的连续正序6个月份数据,且不能出现跨年循环的无序情况。原代码使用取模逻辑导致跨年前的月份被错误包含,可通过计算连续索引区间实现需求:

修改后的代码

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)

# 替换为需要测试的月份:"January"/"December"/"October"
selected_month = "January"
selected_month_idx = df[df["month"] == selected_month].index[0]
total_months = len(df)
required_rows = 6

# 计算目标索引区间
if selected_month_idx + (required_rows - 1) < total_months:
    # 选中月份后有足够的月份,从选中月份开始取6个
    start_idx = selected_month_idx
    end_idx = selected_month_idx + required_rows - 1
else:
    # 选中月份后不足5个月份,取全年最后6个月份(包含选中月份)
    start_idx = total_months - required_rows
    end_idx = total_months - 1

# 获取结果并重置索引(可选)
six_months_df = df.loc[start_idx:end_idx].reset_index(drop=True)
print(six_months_df)

逻辑说明

  1. 定位选中月份:通过索引匹配获取选中月份在DataFrame中的位置;
  2. 判断区间范围:
    • 若选中月份的索引加5(需包含自身共6条数据)小于总月份数,直接从选中月份开始往后取6条连续数据;
    • 若超出总月份数,说明后续月份不足,直接取全年最后6条数据,既保证包含选中月份,又维持正序无跨年;
  3. 提取数据:用索引切片直接获取连续区间的数据,reset_index(drop=True)可重置结果索引,让输出更整洁(可按需去掉)。

测试验证

  • 选中January时,输出1-6月的正序数据,符合期望;
  • 选中December时,输出7-12月的正序数据,符合期望;
  • 选中October时,输出7-12月的正序数据,符合期望。

内容的提问来源于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 04:52:15