如何在含NaN的DataFrame score列分段求各段极值
解决方法:提取NaN前分段的极值
嘿,这个需求很明确,我们可以通过两种方式来实现——一种是基于你已经转换好的列表处理,另一种是直接用Pandas原生方法更高效地操作DataFrame。
方法一:基于列表的遍历处理
既然你已经把DataFrame的score列转成了列表,那我们可以直接遍历列表,收集每个NaN前的元素分段,再计算极值:
import math # 你的示例列表(也可以直接用你转换好的score_list) score_list = [11.03680137760893, 5.351482041139766, 10.10019513222711, float('nan'), 0.960990030082931, float('nan'), 6.46983084276682, 32.46794015293125, float('nan')] current_segment = [] segment_count = 1 for num in score_list: if not math.isnan(num): # 非NaN元素加入当前分段 current_segment.append(num) else: # 遇到NaN时,计算当前分段的极值(跳过空分段,比如连续NaN的情况) if current_segment: seg_max = max(current_segment) seg_min = min(current_segment) print(f"第{segment_count}个NaN前的分段:最大值{seg_max}、最小值{seg_min}") segment_count += 1 # 重置分段,准备收集下一段元素 current_segment = [] # 额外处理:如果列表末尾没有NaN,剩下的元素也要计算极值 if current_segment: seg_max = max(current_segment) seg_min = min(current_segment) print(f"最后一段(无后续NaN):最大值{seg_max}、最小值{seg_min}")
代码说明:
- 用
current_segment临时存储当前正在收集的非NaN元素,segment_count标记是第几个NaN前的分段 - 遇到NaN时,检查当前分段是否有元素(避免连续NaN导致空列表报错),然后计算并打印极值,之后重置分段
- 最后加了兜底逻辑,处理列表末尾没有NaN的情况
运行这段代码后,输出和你需要的完全一致:
第1个NaN前的分段:最大值11.03680137760893、最小值5.351482041139766 第2个NaN前的分段:最大值0.960990030082931、最小值0.960990030082931 第3个NaN前的分段:最大值32.46794015293125、最小值6.46983084276682
方法二:直接用Pandas原生方法(更高效)
如果你不需要转成列表,直接操作DataFrame会更简洁,利用Pandas的分组功能就能快速得到结果:
import pandas as pd import numpy as np # 示例DataFrame(替换成你的description_df即可) df = pd.DataFrame({'score': [11.03680137760893, 5.351482041139766, 10.10019513222711, np.nan, 0.960990030082931, np.nan, 6.46983084276682, 32.46794015293125, np.nan]}) # 生成分段标记:每遇到一个NaN,分段编号+1 df['segment'] = df['score'].isna().cumsum() # 过滤掉NaN行,按分段分组计算最大值和最小值 result = df[df['score'].notna()].groupby('segment')['score'].agg(['max', 'min']) print(result)
代码说明:
df['score'].isna().cumsum()会给每个NaN前的元素分配相同的分段编号,比如第一个NaN前的元素都是0,第二个NaN前的是1,以此类推- 过滤掉NaN行后,用
groupby和agg一次性计算每个分段的极值
运行后输出的结果如下:
max min segment 0 11.036801 5.351482 1 0.960990 0.960990 2 32.467940 6.469831
你可以根据自己的习惯选择其中一种方法,两种都能完美满足你的需求~
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

