Записывать значения по столбцу SFrame
Пожалуйста, кто-нибудь может сказать мне, как я могу взять логарифм от каждого значения в столбце SFrame, graphlab (или DataFrame, pandas), без итераций по всей длине столбца SFrame? Я особенно интересуюсь подобной функциональностью, например, агрегаторами Groupby для log-функции. Сам не смог найти это...
Важно: пожалуйста, меня не интересуют for-loop
итерация по всей длине столбца. Меня интересуют только конкретные функции, которые преобразуют все значения в лог-значения для всего столбца.
Мне тоже очень жаль, если эта функция есть в руководстве. Пожалуйста, просто дайте мне ссылку...
3 ответа
numpy
предоставляет реализации для широкого ряда основных математических преобразований. Вы можете использовать их на всех структурах данных, которые основаны на Numpy's ndarray
,
import pandas as pd
import numpy as np
data = pd.Series([np.exp(1), np.exp(2), np.exp(3)])
np.log(data)
Выходы:
0 1
1 2
2 3
dtype: float64
Этот пример для pandas
типы данных, но он работает для всех структур данных, которые основаны на numpy
массивы.
Тот же шаблон "применить" работает и для SFrames. Вы могли бы сделать:
import graphlab
import math
sf = graphlab.SFrame({'a': [1, 2, 3]})
sf['b'] = sf['a'].apply(lambda x: math.log(x))
@cel
Я думаю, что в моем случае можно было бы также использовать следующий шаблон.
import numpy
import pandas
import graphlab
df
a b c
1 1 1
1 2 3
2 1 3
....
df['log c'] = df.groupby('a')['c'].apply(lambda x: numpy.log(x))
для кадра (sf
вместо df
объект) это может выглядеть немного иначе
logvals = numpy.log(sf['c'])
log_sf = graphlab.SFrame(logvals)
sf = sf.join(log_sf, how = 'outer')
Вероятно, с numpy
фрагмент кода немного длинен, но работает...
Основная проблема, конечно, время исполнения. Я надеялся, что смогу найти какую-то конкретную функцию, чтобы минимизировать свое время....