【问题标题】:Search the maximum value in a list of Series: ValueError: The truth value of a Series is ambiguous在 Series 列表中搜索最大值:ValueError: The truth value of a Series is ambiguous
【发布时间】:2018-10-05 20:32:39
【问题描述】:

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

"ValueError:一个Series的真值不明确。使用a.empty, a.bool()、a.item()、a.any() 或 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)

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

【问题讨论】:

  • 欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
  • 你的数据框是什么样的?
  • 对不起,我基本上是个初学者。我列表中的每个元素都取自 Dataframe,如下所示:` Date Actual (kW) 0 2016-12-30 12:30:00 180 1 2016-12-30 13:00:00 180 2 2016-12-30 13:30:00 180`
  • IIUC np.array(list_name).max().
  • @shivsn 我在 0x000001FEAD6655D0 处获得

标签: python list pandas max valueerror


【解决方案1】:

由于您使用的是 pandas Dataframes,因此您可以使用这些对象来找到最大值...

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

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

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

df['Actual'].max()

df 是您示例中的数据框。

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

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

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

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

【讨论】:

  • 但是使用该命令我会获得整列的最大值吗?因为我需要在 Dataframe 列的一部分中达到最大值。
  • 您可以根据其他值进行过滤。我用一个相当随机的例子编辑了我的分析器,这对你有帮助吗?
  • 其实我已经过滤了Dataframe。我尝试修改我的代码以利用您的建议。谢谢
  • @AriannaSorrentino,你的问题有什么进展吗?
  • 是的@oliver 你建议的解决方案是完美的!谢谢你:)
【解决方案2】:

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

您想如何确定一个 pandas Series 是否比另一个大?

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

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

一般来说,在 key 中,您指定一个函数应用于列表元素在比较之前,因此这里我传递了一个函数,该函数从每个 Series 中获取第一个(也是唯一一个)值.

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2018-03-31
    • 2023-02-03
    • 2021-01-29
    • 2015-09-21
    • 2020-08-25
    • 2017-03-27
    • 2022-12-28
    • 1970-01-01
    相关资源
    最近更新 更多