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

Python Pandas如何筛选同时含1970与2016年数据的州对应行

解决方法

你需要先识别出同时满足「存在1970年记录」「存在2016年记录」两个条件的州,再基于这些州过滤全表即可。原代码只做了行级的年份范围筛选,没有做按州的聚合校验,所以达不到要求。

方法1:集合交集法(性能最优,逻辑直白)

直接分别取出有1970年记录的州、有2016年记录的州,取两者的交集就是符合要求的州,再过滤原表:

# 提取两个年份分别对应的州集合
states_has_1970 = set(df[df['year'] == 1970]['state'])
states_has_2016 = set(df[df['year'] == 2016]['state'])
# 取交集得到同时有两年数据的州
valid_states = states_has_1970 & states_has_2016
# 过滤原表,保留这些州的所有行
result = df[df['state'].isin(valid_states)]

方法2:分组判断法(适合扩展多条件场景)

如果后续需要扩展判断更多年份(比如要求同时有1970/1990/2016三年数据),用分组判断的写法更方便扩展:

# 按州分组,检查每个州的年份集合是否包含要求的两个年份
valid_states = df.groupby('state')['year'].apply(
    lambda year_col: {1970, 2016}.issubset(set(year_col))
)
# 提取符合条件的州,过滤原表
result = df[df['state'].isin(valid_states[valid_states].index)]

示例数据运行结果

用你给出的测试数据运行后,仅Wisconsin同时存在1970和2016年的记录,最终返回结果如下:

state  year  quarter         v
5  Wisconsin  2016        4  0.168776
6  Wisconsin  1970        4  0.168776

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:12:17