Записывать значения по столбцу 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 фрагмент кода немного длинен, но работает...

Основная проблема, конечно, время исполнения. Я надеялся, что смогу найти какую-то конкретную функцию, чтобы минимизировать свое время....

Другие вопросы по тегам