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

如何用Pandas提取2015-2020年无重复Total值,缺失年份显示unavailable

搞定Pandas提取指定年份数据的缺失值显示问题

我明白你的痛点:现有代码在2020年数据存在时能正常输出每年唯一的Total值,但一旦2020年数据缺失,整个输出就断了,连后面的2019-2015年数据也出不来,还得处理缺失年份显示unavailable的需求。咱们换个思路来解决这个问题,比原代码更靠谱:

核心思路:先做数据映射,再遍历年份

原代码的问题在于它依赖逐行匹配年份,一旦某一年没找到,就不会触发打印也不会推进计数器,导致后续年份都没法处理。我们可以先把每个年份对应的唯一Total值整理成一个字典,然后直接遍历2020到2015的所有年份,逐个查字典——有值就输出,没值就输出unavailable。

修改后的完整代码

import pandas as pd

# 先处理你的DataFrame,得到年份到唯一Total值的映射
# 两种方法二选一,效果一样:
# 方法1:去重后转字典
year_total_map = df.drop_duplicates(subset=['Year']).set_index('Year')['Total'].to_dict()
# 方法2:按年份分组取第一个值(同一年Total值都重复,取第一个就行)
# year_total_map = df.groupby('Year')['Total'].first().to_dict()

# 从2020到2015倒序遍历年份
for year in range(2020, 2014, -1):
    print(year_total_map.get(year, 'unavailable'))

测试两种场景

场景1:有2020年数据的情况

用你给的第一个DataFrame测试,输出会是:

0.66
1.5
unavailable
unavailable
unavailable
unavailable

(因为示例里只有2020和2019的数据,2018-2015都缺失,所以显示unavailable,完全符合要求)

场景2:缺失2020年数据的情况

用第二个DataFrame测试,输出会是:

unavailable
2.00%
7.87%
12.27%
4.67%
unavailable

(2020和2015年缺失,显示unavailable,其他年份正常输出唯一值)

为什么这个方案更稳?

  • 效率更高:不用遍历DataFrame的每一行,预处理后直接查字典,大数据量下优势明显
  • 不会断档:不管哪个年份缺失,都会按顺序输出所有目标年份的结果,不会因为某一年没数据就停住
  • 逻辑清晰:把数据整理和年份输出分开,以后要改年份范围或者缺失值显示内容,直接改对应的地方就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:57:52