Рассмотрим следующий solution для вычисления внутри-группы различий в панд:Ускорение группы-накрест разностей в панд
df = df.set_index(['ticker', 'date']).sort_index()[['value']]
df['diff'] = np.nan
idx = pd.IndexSlice
for ix in df.index.levels[0]:
df.loc[ idx[ix,:], 'diff'] = df.loc[idx[ix,:], 'value' ].diff()
Для:
> df
date ticker value
0 63 C 1.65
1 88 C -1.93
2 22 C -1.29
3 76 A -0.79
4 72 B -1.24
5 34 A -0.23
6 92 B 2.43
7 22 A 0.55
8 32 A -2.50
9 59 B -1.01
Она возвращает:
> df
value diff
ticker date
A 22 0.55 NaN
32 -2.50 -3.05
34 -0.23 2.27
76 -0.79 -0.56
B 59 -1.01 NaN
72 -1.24 -0.23
92 2.43 3.67
C 22 -1.29 NaN
63 1.65 2.94
88 -1.93 -3.58
Решение не масштабируется для больших кадров данных. Требуется несколько минут для кадра данных с формой (405344,2)
. Это, по-видимому, так, потому что я повторяю каждое значение для первого уровня в основном цикле.
Есть ли способ ускорить это в Пандах? Является ли переплетение значений индекса хорошим способом решения этой проблемы? Может ли numba
быть использован для этого?
В моем времени 10 000 DataFrame (с теми же характеристиками, что и OP) это заняло около 40 мс. –