请有人告诉我,如何从SFrame,graphlab(或DataFrame,pandas)列中的每个值中取对数,而不是遍历SFrame列的整个长度? 我特别关注类似的功能,例如Groupby Aggregators用于日志功能。找不到自己......
重要提示:请不要对列的整个长度for-loop
迭代感兴趣。我只对特定函数感兴趣,它将所有值转换为整列的日志值。
如果此功能在手册中,我也很抱歉。请给我一个链接......
答案 0 :(得分:5)
numpy
提供了大量基本数学变换的实现。您可以在基于numpy的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
数组的数据结构。
答案 1 :(得分:4)
相同的“apply”模式也适用于SFrame。你可以这样做:
drop PROCEDURE if EXISTS big_data;
CREATE PROCEDURE big_data()
BEGIN
DECLARE total_count TEXT DEFAULT '';
DECLARE i int DEFAULT 1;
WHILE i <= 10000000 DO
SET total_count = total_count + '(' + i+ ', name, 34),';
SET i = i + 1;
END WHILE;
SET total_count = TRIM(TRAILING ',' FROM total_count);
INSERT INTO test(id, name, age) VALUES ' + total_count;
END;
答案 2 :(得分:-1)
<强> @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))
对于SFrame(sf
而不是df
对象),它可能看起来有点不同
logvals = numpy.log(sf['c'])
log_sf = graphlab.SFrame(logvals)
sf = sf.join(log_sf, how = 'outer')
可能numpy
代码片段有点长,但它有效......
主要问题当然是时间性能。我确实希望,我可以找到一些特定的功能来减少我的时间....