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

如何利用多索引结果筛选含完整12个月的年份数据集?

筛选每个Grid Cell下含完整12个月数据的年份

问题说明

现有包含Grid Cell、Date、Station Temperature字段的CSV文件,目标是仅保留每个Grid Cell下拥有完整12个月数据的年份,剔除月份数不足12的年份。已通过代码识别出符合条件的年份(存储在subset_months中),但不清楚如何利用这个多索引结果筛选原始数据集。

解决方案

方法一:将多索引结果转为DataFrame后合并筛选

把subset_months的多索引转为普通列,再和原始数据集做内连接,精准筛选符合条件的记录:

# 将多索引的subset_months转为带Grid Cells和Year列的DataFrame
valid_groups = subset_months.reset_index()

# 内连接筛选,只保留符合条件的Grid Cells+Year组合
filtered_df = pd.merge(dframe, valid_groups[['Grid Cells', 'Year']], on=['Grid Cells', 'Year'], how='inner')

方法二:利用MultiIndex的isin方法直接匹配

用原始数据的Grid Cells和Year构建多索引,判断是否存在于subset_months的索引中:

# 为原始数据构建多索引
dframe_multi = dframe.set_index(['Grid Cells', 'Year'])

# 筛选符合条件的记录并恢复原索引
filtered_df = dframe_multi[dframe_multi.index.isin(subset_months.index)].reset_index()

方法三:一步到位的groupby+transform筛选(无需提前生成subset_months)

直接在分组时用transform标记每个组是否满足12个月的条件,省去中间步骤:

# 按Grid Cells和Year分组,标记每组月份数是否为12
dframe['is_valid'] = dframe.groupby(['Grid Cells', 'Year'])['Month'].transform(lambda x: len(x) == 12)

# 筛选出有效记录并删除辅助列
filtered_df = dframe[dframe['is_valid']].drop('is_valid', axis=1)

结果验证

运行任意一种方法后,filtered_df就是仅保留每个Grid Cell下完整年份的数据集。以示例数据为例,最终会保留Grid Cell 4719的2009年、Grid Cell 4935的2013年所有记录,剔除2008年的不完整数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:26:30