Оператор IF: как распечатать имена столбцов в Python - PullRequest
0 голосов
/ 16 июня 2020

Вот моя проблема

У меня есть этот DataFrame:

df = pd.DataFrame({'Date':[1,2,3],
                   'Paul':[8,10,13],
                   'Mathieu':[18,20,2],
                   'Jacques':[2,1,70]})

df = df.set_index('Date')

Моя цель - создать оператор IF с этими условиями: ЕСЛИ последнее значение скользящего среднего 2 дня равно <скользящее среднее за 3 дня и первое значение (день 1)> последнее значение (день 3), затем выведите имя столбца.

Это то, что я начал:

def test(data):
    end = data.iloc[-1]
    start = data.iloc[0]
    end_rolling_2D = data.rolling(2).mean().iloc[-1]
    end_rolling_3D = data.rolling(3).mean().iloc[-1]

    if end_rolling_2D < end_rolling_3D and start > end :
        print(data.columns)

Но у меня есть эта ошибка:

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

И я действительно не знаю, как это решить. что ответчиком должен быть «Матье» только потому, что он единственный, кто соответствует условиям.

Я новичок в Python, поэтому, если у кого-то есть идея решить эту проблему, добро пожаловать!

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

start, end, end_rolling_2D и end_rolling_3D являются объектами Series, используйте pd.Series.all()

Замените

if end_rolling_2D > end_rolling_3D and start > end

с

if ((end_rolling_2D>end_rolling_3D) & (start>end)).all()

Чтобы получить место, где выполняется условие, используйте boolean indexing

mask = (end_rolling_2D<end_rolling_3D) & (start>end)
print(df.columns[mask])
# Index(['Mathieu'], dtype='object')
0 голосов
/ 16 июня 2020

Измените вашу функцию на:

def test(data):
    end = data.iloc[-1]
    start = data.iloc[0]
    end_rolling_2D = data.rolling(2).mean().iloc[-1]
    end_rolling_3D = data.rolling(3).mean().iloc[-1]

    if ((end_rolling_2D > end_rolling_3D) & (start > end)).all() :
        print(data.columns)

Обратите внимание, что я добавил скобки. И заменил and на & Однако я не ожидаю каких-либо данных, удовлетворяющих вашим критериям.

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