如何创建含3个数值条件的掩码实现DataFrame日期筛选
问题根因
你的筛选逻辑用错了逻辑运算符:代码里的|是逻辑或,匹配规则是只要满足「年份为2021」「月份为1」「日期为31」三个条件任意一个的行都会被保留,和你要筛选「同时满足年=2021、月=1、日=31」的目标完全不符,自然得不到预期结果。
修正方法
把逻辑或运算符|替换为逻辑与运算符&即可,注意每个独立判断条件都要用圆括号包裹(pandas中按位逻辑运算符优先级高于比较运算符,不加括号会触发运算顺序错误):
mask = (df_atleti_cadiz['year'] == 2021) & (df_atleti_cadiz['month'] == 1) & (df_atleti_cadiz['day'] == 31) df_atleti_cadiz_match = df_atleti_cadiz[mask]
如果后续需要频繁做日期维度的筛选、聚合操作,更推荐先把三个分离的年、月、日列合并为pandas原生的datetime类型列,后续做日期范围筛选、时间序列处理都会方便很多:
# 生成标准日期列 df_atleti_cadiz['date'] = pd.to_datetime(df_atleti_cadiz[['year', 'month', 'day']]) # 筛选目标日期无需拆分多条件 df_atleti_cadiz_match = df_atleti_cadiz[df_atleti_cadiz['date'] == '2021-01-31']
内容的提问来源于stack exchange,提问作者Eduardo Amorim
相关产品推荐
相关产品推荐

