如何使用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)
逻辑说明
- 定位选中月份:通过索引匹配获取选中月份在DataFrame中的位置;
- 判断区间范围:
- 若选中月份的索引加5(需包含自身共6条数据)小于总月份数,直接从选中月份开始往后取6条连续数据;
- 若超出总月份数,说明后续月份不足,直接取全年最后6条数据,既保证包含选中月份,又维持正序无跨年;
- 提取数据:用索引切片直接获取连续区间的数据,
reset_index(drop=True)可重置结果索引,让输出更整洁(可按需去掉)。
测试验证
- 选中
January时,输出1-6月的正序数据,符合期望; - 选中
December时,输出7-12月的正序数据,符合期望; - 选中
October时,输出7-12月的正序数据,符合期望。
内容的提问来源于stack exchange,提问作者user29295031
相关产品推荐
相关产品推荐

