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

如何按season(年份)统计DataFrame中各年份的风暴记录行数?

问题分析与解决方案

你原来的代码返回0的核心原因:DataFrame里season列是数值类型(如int),但你用字符串"1970"做匹配,类型不相等导致筛选不到任何数据。

以下是几种高效的解决方法:

方法1:用value_counts()(最简洁)

value_counts()可直接统计每个年份的出现次数,按年份排序后输出即可:

# 统计并按年份升序排列
year_counts = storms['season'].value_counts().sort_index()

# 遍历输出到2020年
for year, count in year_counts.items():
    if year <= 2020:
        print(f'Number of storms in {year} : {count}')

方法2:用groupby()分组统计

适合需要后续扩展分组操作的场景:

# 按season分组后统计每组行数,再排序
year_counts = storms.groupby('season').size().sort_index()

# 输出结果
for year, count in year_counts.items():
    if year <= 2020:
        print(f'Number of storms in {year} : {count}')

修复你原有代码的方案

如果要保留原有思路,只需统一匹配的类型:

# 方案1:用数值1970匹配(推荐,因为season是数值类型)
storms_1970_filter = storms.apply(lambda x: x['season'] == 1970, axis=1)
# 方案2:将season转为字符串后匹配
storms_1970_filter = storms.apply(lambda x: str(x['season']) == "1970", axis=1)

storms_1970 = len(storms_1970_filter[storms_1970_filter].index)
print('Number of storms in 1970 :', storms_1970)

注意:这种逐行apply的方式效率远低于前两种,不适合处理大数据量。

输出示例

运行后会得到你期望的格式:

Number of storms in 1970 : 10
Number of storms in 1971 : 14
Number of storms in 1972 : 11
...
Number of storms in 2020 : X

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:30:26