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,那里有一些很好的例子!
我需要在列表中的值中找到最大值。这个列表的每个元素都是一个 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,那里有一些很好的例子!