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

如何在Pandas DataFrame中筛选2012年存在污染超标的日期

提取2012年空气质量超标的日期

核心思路

先筛选出2012年的数据集,再按日期分组判断该日期是否存在空气质量>150的记录,最后提取符合条件的唯一日期。

实现方法(基于Pandas)

方法1:利用GroupBy + any() 直接筛选

import pandas as pd

# 确保Datetime列为datetime类型(原始为字符串时执行)
df['Datetime'] = pd.to_datetime(df['Datetime'])

# 筛选2012年的数据
df_2012 = df[df['Datetime'].dt.year == 2012]

# 按Date分组,判断每组是否存在空气质量>150的记录
high_aq_groups = df_2012.groupby('Date')['Airquality(float)'].apply(lambda x: x.gt(150).any())

# 提取符合条件的日期,转为列表格式
result_dates = high_aq_groups[high_aq_groups].index.tolist()

方法2:用Transform标记后去重

如果需要保留原数据集的其他信息,同时标记日期是否超标,可采用这种方式:

import pandas as pd

df['Datetime'] = pd.to_datetime(df['Datetime'])
df_2012 = df[df['Datetime'].dt.year == 2012]

# 给每行标记其所属日期是否存在超标数据
df_2012['has_high_aq'] = df_2012.groupby('Date')['Airquality(float)'].transform(lambda x: x.gt(150).any())

# 提取所有超标日期并去重
result_dates = df_2012[df_2012['has_high_aq']]['Date'].unique().tolist()

方法3:无需单独Date列,直接从Datetime提取日期

如果不想依赖手动新增的Date列,可直接从Datetime字段提取日期分组:

import pandas as pd

df['Datetime'] = pd.to_datetime(df['Datetime'])
df_2012 = df[df['Datetime'].dt.year == 2012]

# 按Datetime的日期部分分组判断
high_aq_groups = df_2012.groupby(df_2012['Datetime'].dt.date)['Airquality(float)'].apply(lambda x: x.gt(150).any())

# 将日期转为字符串格式(可选)
result_dates = [date.strftime('%Y-%m-%d') for date in high_aq_groups[high_aq_groups].index]

说明

  • 所有方法都会确保最终得到的日期是唯一的,不会产生重复冗余;
  • 如果Date列已经是datetime.date类型,无需额外转换,直接分组即可;
  • x.gt(150)等价于x > 150,any()用来判断分组内是否至少有一条满足条件的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:35:16