Как я могу векторизовать операцию apply + filter на pandas.DataFrame? - PullRequest
0 голосов
/ 27 июня 2019

Представьте, что у меня есть Dataframe и столбцы [A,B,C]. Есть несколько разных значений для каждого из этих столбцов. И я хочу создать еще один столбец D, который можно получить с помощью следующей функции:

def produce_column(i):
    # Extract current row by index
    raw = df.loc[i]

    # Extract previous 3 values for the same sub-df which are before i
    df_same = df[
        (df['A'] == raw.A)
        & (df['B'] == raw.B)
    ].loc[:i].tail(3)

    # Check that we have enough values
    if df_same.shape[0] != 3:
        return False

    # Doesn't matter which function is in use, I just need to apply it on the column / columns
    diffs = df_same['C'].map(lambda x: x <= 10 and x > 0)

    return all(diffs)

df['D'] = df.index.map(lambda x: produce_column(x))

Итак, на каждом шаге мне нужно получить Dataframe, который имеет тот же набор свойств, что и строка, и выполнить некоторые операции со столбцами этого Dataframe. У меня есть несколько сотен тысяч строк, поэтому выполнение этого кода занимает много времени. Я думаю, что хорошей идеей является векторизация операции, но я не знаю, как это сделать. Может быть, есть другой способ сделать это?

Заранее спасибо!

UPD Вот пример

df = pd.DataFrame([(1,2,3), (4,5,6), (7,8,9)], columns=['A','B','C'])

    A   B   C
0   1   2   3
1   4   5   6
2   7   8   9


df['D'] = df.index.map(lambda x: produce_column(x))
    A   B   C   D
0   1   2   3   True
1   4   5   6   True
2   7   8   9   False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...