我有一个数据框,其中有一列名为“得分”。我将从该列中提取所有元素到列表中。它介于两者之间。我希望在每个“ 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第三个“难”
答案 0 :(得分:1)
您可以通过用Series.isna
用Series.cumsum
测试丢失的值来创建组,用min
和max
用GroupBy.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