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

如何自动筛选玉米种植月份的DataFrame?解决isin仅取首元素问题

解决方法

高效矢量化筛选(推荐)

完全不需要循环,Pandas的矢量化操作比循环高效几个数量级,尤其适合大数据量场景。直接用between方法或者布尔索引就能实现需求:

import pandas as pd

# 方法1:使用between,自动处理l和m的大小顺序
filtered_df = df_area[df_area["Month"].between(min(l, m), max(l, m))]

# 方法2:直接用布尔逻辑,效果相同
filtered_df = df_area[(df_area["Month"] >= min(l, m)) & (df_area["Month"] <= max(l, m))]

原代码问题分析

你之前的循环代码之所以只拿到单个月份的数据,是因为每次循环都重新赋值mask变量,覆盖了之前的结果。比如循环到k=3时,mask会被替换成仅包含3月的数据,之前k=2的结果完全丢失。

如果非要用循环(不推荐,仅作原理演示),需要把每次筛选的结果累加:

# 初始化空DataFrame存储结果
filtered_df = pd.DataFrame()
start = min(l, m)
end = max(l, m)

for k in range(start, end + 1):
    # 筛选当前月份的行
    temp = df_area[df_area["Month"] == k]
    # 追加到结果中
    filtered_df = pd.concat([filtered_df, temp], ignore_index=True)

但这种方法在数据量大时会非常慢,因为concat是O(n)操作,多次调用会导致性能急剧下降,所以优先用前面的矢量化方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:05:54