pandas.dataFrame. Рассчитать данные произвольным образом из численного столбца произвольного размера
Опыт в программировании не один год, но это мой первый пост на SOF. Прошу помочь мне на позитивной волне влиться в изучение python ☺.
Дано:
Найти:
- Для значения колонки std в каждой строке N датафрейма найти среднеквадратческое отклонение на основании предыдущих i=2 значений (N-1 и N-2; два - в качестве примера; в работе будет i=1000-100000) из колонки bid чтобы получилось как в последней ячейке по ссылке из Дано (и так для 50 миллионов строк - поэтому ищу способы сделать это оптимально)
- (опционально) Универсальный алгоритм, который мог бы считать не только std, но и, скажем, среднекубическое отклонение (только что придумал), то есть, в широком смылсе - взять f(∑X(i)) произвольную функцию от i предыдущих значений колонки
Решение:
- apply не подходит т.к. берет общее значение std по всей колонке bid
- rolling не взлетел т.к. нет процедуры вычисления std для каждой строки, а numpy не принимает на вход данные сложного типа, только массив чисел
- циклом делать не хочется, т.к. предполагаю что для 50 миллионов строк это затянется надолго, но если это единственный вариант - он принимается
Ответы (1 шт):
Автор решения: passant
→ Ссылка
rolling не взлетел т.к. нет процедуры вычисления std для каждой строки, - объясните, что вы имели ввиду, когда писали. Дело в том,
что df['B']=df.A.rolling(window=N).std()
прекрасно считает std на основании последних N значений столбца A и записывает результат в столбец B.
Непонятно и выражение "а numpy не принимает на вход данные сложного типа, только массив чисел" - а откуда у вас в bid данные "сложного типа"?
Ну и наконец: Универсальный алгоритм,....взять ... произвольную функцию от i предыдущих значений колонки
def my_func(r):
s=r.iloc[0]**0+r.iloc[1]**1+r.iloc[2]**2+r.iloc[3]**3
return (s)
df['C']=df['A'].rolling(window=4, axis='rows').apply(lambda row: my_func(row))