У меня есть следующие dataframe
из dates
и codes
.
df = pd.DataFrame(
{'date': list(pd.date_range(start='2018-01-01', end='2018-12-30')) * 364,
'code': np.random.permutation(list(np.arange(23001, 23001 + 8281)) * 16)}
).sort_values('date', ascending=True).reset_index(drop=True)
Я хотел бы, чтобы для каждого code
, произошедшего в specific time
, считалось все идентичное code
, которое произошло до или в ту же дату.
def nb_code_at_date(x):
condition = (df['date'] <= x['date'])
return (df.loc[condition, 'code'] == x['code']).sum()
Очевидно, что проблема заключается в времени, необходимом для вычисления этого для «большого» фрейма данных:
%%timeit
df.head(1000).apply(lambda x: nb_code_at_date(x), axis=1)
>> 2.89 s ± 283 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Как бы вы поступили, чтобы увеличить это время ожидания?