Поиск максимального значения в списке Series: ValueError: Истинное значение Series неоднозначно - PullRequest
0 голосов
/ 25 апреля 2018

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

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

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

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

Для обоих см. здесь в качестве ссылки.

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

df['Actual'].max()

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

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

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

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

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

0 голосов
/ 25 апреля 2018

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...