Как проверить, равна ли строка i фрейма данных значению?

#python #dataframe

#python #фрейм данных

Вопрос:

Мне не удается решить эту проблему.

 for i in range(0,len(df1.columns)):
    if df1.iloc[i:].values ==1:
        print ('Buy')
        order= True
    elif df1.iloc[i:] == -1:
        print ('Sell')
        order= True
    else:
        print ('Do nothing')
        time.sleep(30)
    if a==5:
        break
  

У меня есть dataframe df1 , который включает значения -1, 0 и 1.
Итак, в основном я пытаюсь напечатать, например, «купить», если в фрейме данных появляется значение 1 (этот код является концом цикла, до этого я устанавливал каждые 30 секунд новое значение для df )

Для возобновления:

Устанавливайте новое значение для df каждые 30 секунд (уже делали это), проверяйте, равно ли это значение -1,0 или 1, печатайте каждые 30 секунд «купить», «продать» или «Ничего не делать» в соответствии с новым значением, временем ожидания, а затем устанавливайте новое значение для df и т.д.

Когда я запускаю приведенный выше код, он выдает мне: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() .

Комментарии:

1. Будет полезно предоставить образец того, как df1 выглядит.

Ответ №1:

Я думаю, потому что вы пытались сравнить список с одним значением, вы получили это сообщение об ошибке

форма вашего фрейма данных df1 нам не ясна, поэтому я предполагаю, что здесь попробуйте изменить

 if df1.iloc[i:].values ==1:
  

Для

 if df1.iloc[i] ==1:
  

а также изменить

 elif df1.iloc[i:] == -1:
  

Для

 elif df1.iloc[i] == -1:
  

Комментарии:

1. Привет, Махмуд, спасибо за ваш ответ. Я уже пробовал это, он продолжает сообщать мне то же самое ValueError «Значение истинности ряда неоднозначно», может быть, потому, что вывод этого True или False, поэтому тип bool? (df1 — это фрейм данных)

Ответ №2:

Привет, Мартино, спасибо за ваш ответ.

Фильтр означает, что сигнал «купить», если он равен 1, «Продать», если он равен -1, «ничего не делать», если 0. Задержка предназначена только для фиксации изменений в сигнале и, наконец, strat = filter * lag .

Итак, с моими столбцами strat я меняю свою позицию только один раз, и если сигнал останется в той же позиции, он выдаст 0 (ничего не делать).

Моя проблема в том, что я хочу после каждого цикла ’round’ проверять, равно ли последнее значение фрейма данных -1,1 или 0. Кажется, что вывод является значением bool..

df1
df1