Значение неоднозначной истины - для операторов L oop & If - PullRequest
0 голосов
/ 05 апреля 2020

Погоня за обоснованием следующего сообщения об ошибке.

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Это код, который я запускаю:

anz_analysis["Action"] = anz_analysis["Signal"]        

for i in range(0, len(anz_analysis) + 1):       
    if ((anz_analysis["Signal"].iloc[[i]] == "Buy") & (anz_analysis["Signal"].iloc[[i+1]] == "Buy")):
        anz_analysis["Action"] = anz_analysis["Signal"].iloc[[i]] = "Maintain"
    elif (anz_analysis["Signal"].iloc[[i]] = "Sell") & (anz_analysis["Signal"].iloc[[i+1]] = "Sell"):
        anz_analysis["Signal"].iloc[[i]] = "Maintain"

Фрейм данных выглядит следующим образом:


Current: Wanted: 
_______|_________
1|Buy  | Buy
2|Buy  | Maintain
3|Buy  | Maintain
4|Sell | Sell
5|Sell | Maintain
6|Sell | Maintain

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 апреля 2020

Использование .iloc[[i]] возвращает Series. Поэтому, хотя в Series есть только одно значение, оно возникает ValueError, потому что вы сравниваете Series с str.

Один из способов справиться с этим - использовать .iloc[[i]][0]. Это «извлечет» строку и позволит провести сравнение между одними и теми же типами.

Лучшим способом было бы выбрать строку и столбец с помощью iloc. Например,

anz_analysis["Action"] = anz_analysis["Signal"]        

for i in range(len(anz_analysis) + 1):       
    if ((anz_analysis.iloc[i, 'Signal'] == "Buy") & (anz_analysis.iloc[i + 1, 'Signal'] == "Buy")):
        anz_analysis["Action"] = anz_analysis.iloc[i, 'Signal'] = "Maintain"
    elif (anz_analysis.iloc[i, 'Signal'] == "Sell") & (anz_analysis.iloc[i + 1, 'Signal'] == "Sell"):
        anz_analysis.iloc[i, 'Signal'] = "Maintain"

Редактировать Обновлен оператор elif в соответствии с наблюдением @ 6502 вероятной ошибки в коде OP. Также решено удалить ложное начальное значение 0 в range.

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