Ошибка возврата цикла, что истинное значение ряда неоднозначно - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующий набор данных:

enter image description here

Я пытаюсь сказать пандам, что:

Если номер отчета ниже30, ему нужно создать новую переменную, равную

df_bei_index [col] * 0,05 + df_bei_index ['PDI_Average'] * 0,95.

Если отчет №больше или равно 30, ему нужно создать новую переменную, равную

df_bei_index [col]

Я написал следующий код:

for col in col_list:
    if df_bei_index['Report No'] <= 29:
        df_bei_index[col+'_final'] = df_bei_index[col]*0.05 + df_bei_index['PDI_Average']*0.95
    else:
        df_bei_index[col+'_final'] = df_bei_index[col]

Но я получаю эту ошибку


ValueError Traceback (последний последний вызов) в () 10 11 для col в col_list: ---> 12 if df_bei_index ['Отчет № '] <= 29: 13 df_bei_index [col +' _ final '] = df_bei_index [col] * 0,05 + df_bei_index [' PDI_Average '] * 0,95 14 еще: </p>

~ \ Anaconda3 \ lib \ site-packages\ pandas \ core \ generic.py в ненулевое (self) 1574 повысить ValueError («Значение истинности {0} неоднозначно.» 1575 »Используйте a.empty, a.bool (), a.item (), a.any () или a.all (). "-> 1576 .format (self. класс . имя )) 1577 1578 bool = ненулевой

ValueError: Значение истинности сериинеоднозначно.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Выражение типа df_bei_index['Report No'] <= 29 имеет тип Series(bool), поэтому вы не можете использовать его в операторе if, но вы можете использовать его как индекс в .loc для вашего фрейма данных:

import pandas as pd

data = {'a': list(range(20)), 'b': list(range(6,26))}
df = pd.DataFrame(data = data)

condition1 = df.a <= 10
condition2 = df.a > 10
df.loc[condition1, 'a_1'] = df.loc[condition1]['a'] * 2
df.loc[condition2, 'a_1'] = df.loc[condition2]['a'] * 5
0 голосов
/ 14 февраля 2019

Проверьте этот ответ: Python Используйте, если функция: ValueError: Истинное значение Серии неоднозначно.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()

. Вы можете использовать np.where:

for col in col_list:
        df_bei_index[col+'_final'] = np.where(df_bei_index['Report No'] <=29, df_bei_index[col]*0.05 + df_bei_index['PDI_Average']*0.95, df_bei_index[col])

Я предполагаю, что вы исключаете столбец "Страна" из списка "col_list"

...