【问题标题】:How to find the min and max elements in a list that has nan in between如何在中间有 nan 的列表中找到最小和最大元素
【发布时间】:2019-11-28 10:45:59
【问题描述】:

我有一个数据框,其中有一个名为“score”的列。我正在将该列中的所有元素提取到一个列表中。它之间有'nan's。我希望在每个“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

然后,我应该能够将 max 识别为 11.03680137760893 和 min 在第一个“nan”出现之前为 5.351482041139766,0.960990030082931 作为第二个 nan 出现之前和第一个 nan 出现之后的最小值和最大值,32.46794015293125 作为最大值,6.46983084276682 作为第二个“nan”之后和之前的最小值第三个“南”

【问题讨论】:

标签: python-3.x pandas dataframe


【解决方案1】:

您可以通过Series.isna 和Series.cumsum 测试缺失值、GroupBy.agg 和min 和max 聚合来创建组,最后通过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

【讨论】:

  • 谢谢,我在单独的数据框中获取最小值和最大值,但最小值和最大值需要在原始数据框中的“分数”列中。我该怎么做?
【解决方案2】:

您可以创建两个名为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2021-10-10
    • 1970-01-01
    • 2015-01-05
    • 2020-02-10
    • 2020-09-22
    • 2014-05-07
    相关资源
    最近更新 更多