Search the maximum value in a list of Series: ValueError: The truth value of a Series is ambiguous

Search the maximum value in a list of Series: ValueError: The truth value of a Series is ambiguous

我需要在列表中的值中找到最大值。这个列表的每个元素都是一个 pd.Series 所以当我使用函数 max(list) 我得到这个错误:

"ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."

如何避免这个问题?

来自如下所示的 Dataframe:

             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)

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

为了计算列表的最大值,Python需要比较列表中的元素。 在您的例子中,列表中的每个元素都是一个 pandas 系列。 错误来自于在两个系列的比较中没有单一的 True/False 答案(因为比较是逐个元素进行的)。

你想如何确定一个 pandas 系列是否比另一个大?

如果我假设每个系列只有一个值,你可以这样做:

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

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

由于您使用的是 pandas 数据框,因此您可以使用这些对象来查找最大值...

  • ... 整个帧的,即列方向的最大值;在具有 m 列的框架中,您将获得 m 最大值
  • ...单个列

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

所以在你的情况下,你应该能够简单地做到:

df['Actual'].max()

其中 df 是您示例中的数据框。

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

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

这将取 'Foo' 列,select 'Foo' 大于或等于 3 的所有内容,然后取 'Bar' 列并打印最大值只有 'Bar'.

的过滤范围

我建议你看看 how selection is done in Pandas,那里有一些很好的例子!