如何在介于nan和nan之间的列表中查找min和max元素

时间:2019-07-19 12:24:37

标签: python-3.x pandas dataframe

我有一个数据框,其中有一列名为“得分”。我将从该列中提取所有元素到列表中。它介于两者之间。我希望在每个“ nan”出现之前确定元素的最小值和最大值。

我一直在考虑将列转换为列表,然后遍历该列表,直到遇到“ nan”为止。但是,如何在nan之前遍历以找到最小和最大元素?

这是我编写的代码,用于将数据框的一列转换为一个列表,然后识别“ nan”。

score_list = description_df['score'].tolist()
for i in score_list:
    print(i)
    if math.isnan(i):
        print("\n")

假设我的数据看起来像这样,

 11.03680137760893
 5.351482041139766
 10.10019513222711
 nan
 0.960990030082931
 nan
 6.46983084276682
 32.46794015293125
 nan

然后,我应该能够将最大值标识为11.03680137760893 和最小值为5.351482041139766,在出现第一个“ nan”之前,最小值为0.960990030082931,为第二个nan出现之前和第一个nan出现之后的最小值和最大值,以及32.46794015293125个最大值,在第二个“ nan”之后和之前的最小值为6.46983084276682第三个“难”

2 个答案:

答案 0 :(得分:1)

您可以通过用Series.isnaSeries.cumsum测试丢失的值来创建组,用minmaxGroupBy.agg进行汇总,最后通过仅删除丢失的行来创建组。 DataFrame.dropna

df = df.groupby(df['score'].isna().cumsum())['score'].agg(['min','max']).dropna()
print (df)
            min        max
score                     
0      5.351482  11.036801
1      0.960990   0.960990
2      6.469831  32.467940

答案 1 :(得分:1)

您可以创建两个名为 min max 的变量,它们在每次找到nan并打印(或存储)时都以默认值开头。

import sys

score_list = description_df['score'].tolist()
max = sys.float_info.min
min = sys.float_info.max
for i in score_list:
    print(i)
    if math.isnan(i):
        print("max =", max, "min =", min, "\n")
        max = sys.float_info.min
        min = sys.float_info.max
    else:
        if i > max:
            max = i
        if i < min:
            min = i