Найдите максимальное значение в списке Series: ValueError: истинное значение Series неоднозначно

Мне нужно найти максимальное значение среди значений в списке. Каждый элемент этого списка является pd.Series, поэтому, когда я использую функцию 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)

Мне нужно найти максимальное значение в списке энергии. Спасибо


person Arianna Sorrentino    schedule 25.04.2018    source источник
comment
Добро пожаловать в StackOverflow. Найдите время, чтобы прочитать этот пост о как предоставить отличный пример панд, а также как предоставить минимальный, полный и проверяемый пример и соответствующим образом изменить свой вопрос. Эти советы о том, как как задать хороший вопрос, также могут быть полезны.   -  person jezrael    schedule 25.04.2018
comment
Как выглядит ваш фрейм данных?   -  person Simon    schedule 25.04.2018
comment
Извините, я в основном новичок. Каждый элемент моего списка взят из Dataframe выглядит следующим образом: `Дата Фактическая (кВт) 0 2016-12-30 12:30:00 180 1 2016-12-30 13:00:00 180 2 2016-12-30 13:30:00 180`   -  person Arianna Sorrentino    schedule 25.04.2018
comment
IIUC np.array(list_name).max().   -  person shivsn    schedule 25.04.2018
comment
@shivsn Я получаю ‹встроенный метод max объекта numpy.ndarray по адресу 0x000001FEAD6655D0›   -  person Arianna Sorrentino    schedule 25.04.2018
comment
@AriannaSorrentino, вам нужно будет опубликовать образец и желаемый результат.   -  person shivsn    schedule 25.04.2018
comment
Хорошо, я стараюсь. Извините   -  person Arianna Sorrentino    schedule 25.04.2018
comment
@AriannaSorrentino Непонятно, какое максимальное значение среди значений в списке имеет значение Series.   -  person Stop harming Monica    schedule 25.04.2018
comment
np.max(energy) должно работать.   -  person shivsn    schedule 25.04.2018
comment
Я получаю codedataframe nan C: \ Users \ arianna \ Anaconda3 \ lib \ site-packages \ numpy \ core_methods.py: 26: RuntimeWarning: обнаружено недопустимое значение при сокращении return umr_maximum (a, axis, None, out, keepdims) code   -  person Arianna Sorrentino    schedule 25.04.2018


Ответы (2)


Поскольку вы работаете с пандами Dataframes, вы можете использовать эти объекты, чтобы найти максимальное значение ...

  • ... всего кадра, т.е. максимумы по столбцам; в кадре с m столбцами вы получите m максимальных значений
  • ... отдельных столбцов

Для обоих см. здесь в качестве справочной информации.

Итак, в вашем случае вы должны просто сделать:

df['Actual'].max()

где df - фрейм данных из вашего примера.

Если вам нужно отфильтровать диапазон значений, это тоже возможно. Рассмотрим этот (произвольный) пример синтаксиса:

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

Это займет столбец «Foo», выберите все, где «Foo» больше или равно 3, а затем возьмите столбец «Bar» и напечатайте максимум только для этого отфильтрованного диапазона «Bar».

Предлагаю вам взглянуть на как выполняется выбор в Pandas Там есть интересные примеры!

person Oliver Baumann    schedule 25.04.2018
comment
Но с помощью этой команды я получу максимум всего столбца? потому что мне нужен максимум в части столбца Dataframe. - person Arianna Sorrentino; 25.04.2018
comment
Вы можете отфильтровать по другим значениям. Я отредактировал свой ансер довольно случайным примером, это вам поможет? - person Oliver Baumann; 25.04.2018
comment
На самом деле я уже фильтрую Dataframe. Я пытаюсь изменить свой код, чтобы воспользоваться вашим предложением. Спасибо - person Arianna Sorrentino; 25.04.2018
comment
@AriannaSorrentino, добились ли вы прогресса в решении своей проблемы? - person Oliver Baumann; 27.04.2018
comment
да @oliver решение, которое вы предложили, было идеальным! Спасибо :) - person Arianna Sorrentino; 28.04.2018
comment
@AriannaSorrentino, это отличные новости :) если вы не против, примите этот ответ, нажав на галочку, это поможет другим ориентироваться в пространстве (и вознаградит меня очками репутации ;-)) - person Oliver Baumann; 28.04.2018

Чтобы вычислить максимум списка, Python необходимо сравнить элементы в списке. В вашем случае каждый элемент списка представляет собой серию панд. И ошибка возникает из-за того, что нет единого ответа True / False при сравнении двух серий (поскольку сравнение выполняется поэлементно).

Как вы хотите определить, больше ли одна серия панд, чем другая?

Если я предполагаю, что каждая серия имеет только одно значение, вы можете:

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

Как правило, в key вы указываете функцию, которая применяется к элементам списка перед сравнением, поэтому здесь я передал функцию, которая принимает первое (и единственное) значение из каждой серии.

person FLab    schedule 25.04.2018