Представьте, что у меня есть 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