代码之家  ›  专栏  ›  技术社区  ›  Arianna Sorrentino

搜索序列列表中的最大值:值错误:序列的真值不明确

  •  0
  • Arianna Sorrentino  · 技术社区  · 7 年前

    我需要在列表中的值中找到最大值。此列表中的每个元素都是pd。因此,当我使用函数max(list)时,会出现以下错误:

    “ValueError:序列的真值不明确。请使用a.empty, a、 bool()、a.item()、a.any()或a.all()。“”

    如何避免此问题?

    从如下所示的数据帧:

                 Date                Actual 
    0     2016-12-30 12:30:00          1800
    1     2016-12-30 13:00:00          1800
    2     2016-12-30 13:30:00          1600 
    .
    .
    .
    1256   201-05-30 13:30:00          1500
    

    我创建我的列表:

    for single_date in datetime_range(start_date, end_date, timedelta(minutes=30)):
            b = find_nearest(df['Date'], single_date)
            row = df4[df4['Date'] == b ].index.tolist()  
            en=(df4.iloc[row]['Actual (kW)'])
            energy.append(en)
    

    我需要在能量列表中找到最大值。非常感谢。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Oliver Baumann    7 年前

    由于您正在使用熊猫数据帧,因此可以使用这些对象来查找最大值。。。

    • 。。。整个框架的最大值,即列最大值;在具有的框架中 M 您将获得的列 M 最大值
    • 。。。单个列的

    对于两者,请参见 here 作为参考。

    因此,在您的情况下,您应该能够简单地执行以下操作:

    df['Actual'].max()
    

    哪里 df 是示例中的数据帧。

    如果您必须过滤到一个值范围,这也是可能的。考虑以下(任意)语法示例:

    df[df['Foo'] >= 3]['Bar'].max()
    

    这将取“Foo”列,选择“Foo”大于或等于3的所有内容,然后取“Bar”列,并仅打印“Bar”过滤范围的最大值。

    我建议你看看 how selection is done in Pandas ,这里有一些简洁的例子!

        2
  •  0
  •   FLab    7 年前

    为了计算列表的最大值,Python需要比较列表中的元素。 在您的情况下,列表中的每个元素都是熊猫系列。 错误的原因是,在两个系列的比较中没有单一的对/错答案(因为比较是逐元素进行的)。

    您想如何确定一个熊猫系列是否比另一个大?

    如果我假设每个序列只有一个值,则可以执行以下操作:

    max(list_name, key=lambda x: x.values[0])
    

    通常,在键中指定应用于列表元素的函数 之前 比较,因此我在这里传递了一个函数,该函数从每个系列中获取第一个(也是唯一的)值。