Pandas DataFrame按年月统计满足多列条件的日度事件数量方法
错误原因说明
- 你写的lambda函数存在语法错误:
x >= 1 & <=5是不合法的比较写法,且位运算符&优先级高于比较运算符,不加括号会导致运算逻辑完全错误。 - 第二种过滤写法逻辑错误:你将
df.loc[xxx]返回的DataFrame直接和布尔数组做&运算,类型不匹配所以抛出“混合数组与标量”的报错,多条件过滤不需要嵌套df.loc。
正确实现代码
方案1:统计满足条件的小时数(与你提供的期望输出完全匹配)
# 生成同时满足所有条件的布尔掩码,若实际列名不同可自行替换 mask = (df['wind'] <= 5) & (df['temp'] >= 1.0) & (df['temp'] <= 5.0) & (df['rh'] <= 30) # 筛选符合条件的行 valid_df = df[mask] # 按站点、年、月分组统计数量 result = valid_df.groupby(['site', 'year', 'month'], as_index=False).size().rename(columns={'size': 'condition_count'})
方案2:统计达标天数(当日存在至少1小时满足条件即计为1天,符合你描述的日度“事件”定义)
# 生成同时满足所有条件的布尔掩码 mask = (df['wind'] <= 5) & (df['temp'] >= 1.0) & (df['temp'] <= 5.0) & (df['rh'] <= 30) valid_df = df[mask] # 先按站点、年、月、日去重,再分组统计达标天数 result = valid_df.drop_duplicates(subset=['site', 'year', 'month', 'day'])\ .groupby(['site', 'year', 'month'], as_index=False)\ .size()\ .rename(columns={'size': 'condition_count'})
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

