我想计算data.table中每个列的平均值,按另一列分组.我的问题类似于关于SO的另外两个问题(一个和两个),但我不能将这些问题应用于我的问题.
这是一个例子:
library(data.table)
dtb <- fread(input = "condition,var1,var2,var3
one,100,1000,10000
one,101,1001,10001
one,102,1002,10002
two,103,1003,10003
two,104,1004,10004
two,105,1005,10005
three,106,1006,10006
three,107,1007,10007
three,108,1008,10008
four,109,1009,10009
four,110,1010,10010")
dtb
# condition var1 var2 var3
# 1: one 100 1000 10000
# 2: one 101 1001 10001
# 3: one 102 1002 10002
# 4: two 103 1003 10003
# 5: two 104 1004 10004
# 6: two 105 1005 10005
# 7: three 106 1006 10006
# 8: three 107 1007 10007
# 9: three …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚Pandas .aggregate和.apply功能之间的区别.
以下面的例子为例:我加载一个数据集,做一个groupby,定义一个简单的函数,以及用户.agg或.apply.
正如您所看到的,使用.agg和后,我的函数中的打印语句会产生相同的输出.apply.结果,另一方面是不同的.这是为什么?
import pandas
import pandas as pd
iris = pd.read_csv('iris.csv')
by_species = iris.groupby('Species')
def f(x):
...: print type(x)
...: print x.head(3)
...: return 1
Run Code Online (Sandbox Code Playgroud)
使用apply:
by_species.apply(f)
#<class 'pandas.core.frame.DataFrame'>
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#0 5.1 3.5 1.4 0.2 setosa
#1 4.9 3.0 1.4 0.2 setosa
#2 4.7 3.2 1.3 0.2 setosa
#<class 'pandas.core.frame.DataFrame'>
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#0 5.1 …Run Code Online (Sandbox Code Playgroud) 考虑这样的代码(Python):
import random
for i in [1, 2, 3, 4]:
random.seed(i)
randNumbers = [random.rand() for i in range(100)] # initialize a list with 100 random numbers
doStuff(randNumbers)
Run Code Online (Sandbox Code Playgroud)
我想确保randNumbers与一个调用有很大不同.我是否需要确保种子数量在后续调用之间存在显着差异,或者种子是否足够(无论如何)?
对于学生:请认识到上面的代码是超简化的
我正在研究" 编程集体智慧 ".在第4章中,Toby Segaran构建了一个人工神经网络.本书页面上显示以下功能:
def generatehiddennode(self,wordids,urls):
if len(wordids)>3: return None
# Check if we already created a node for this set of words
sorted_words=[str(id) for id in wordids]
sorted_words.sort()
createkey='_'.join(sorted_words)
res=self.con.execute(
"select rowid from hiddennode where create_key='%s'" % createkey).fetchone()
# If not, create it
if res==None:
cur=self.con.execute(
"insert into hiddennode (create_key) values ('%s')" % createkey)
hiddenid=cur.lastrowid
# Put in some default weights
for wordid in wordids:
self.setstrength(wordid,hiddenid,0,1.0/len(wordids))
for urlid in urls:
self.setstrength(hiddenid,urlid,1,0.1)
self.con.commit()
Run Code Online (Sandbox Code Playgroud)
我无法理解的是这个函数第一行的原因:'if len(wordids> 3):return None`.是否需要稍后删除调试代码?
PS这不是作业
pyspark数据框缺少值:
tbl = sc.parallelize([
Row(first_name='Alice', last_name='Cooper'),
Row(first_name='Prince', last_name=None),
Row(first_name=None, last_name='Lenon')
]).toDF()
tbl.show()
Run Code Online (Sandbox Code Playgroud)
这是桌子:
+----------+---------+
|first_name|last_name|
+----------+---------+
| Alice| Cooper|
| Prince| null|
| null| Lenon|
+----------+---------+
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列,如下所示:
我可以构造一个简单的函数:
def combine_data(row):
if row.last_name is None:
return row.first_name
elif row.first_name is None:
return row.last_name
else:
return '%s %s' % (row.first_name, row.last_name)
tbl.map(combine_data).collect()
Run Code Online (Sandbox Code Playgroud)
我确实得到了正确的结果,但是我无法将其作为列追加到表中:tbl.withColumn('new_col', tbl.map(combine_data))结果为AssertionError: col should be Column
将结果转换map为a 的最佳方法是Column什么?有没有一种首选的方法来处理null价值观?
可以Row使用点符号来访问PySpark 元素:给定r= Row(name="Alice", age=11),可以分别使用r.name或来获取名称或年龄r.age。当需要获取其名称存储在变量中的元素时会发生什么element?一种选择是做r.toDict()[element]。但是,考虑一种情况,我们有一个很大的空间DataFrame,并且希望在该数据帧的每一行上映射一个函数。我们当然可以做类似的事情
def f(row, element1, element2):
row = row.asDict()
return ", ".join(str(row[element1]), str(row[element2]))
result = dataframe.map(lambda row: f(row, 'age', 'name'))
Run Code Online (Sandbox Code Playgroud)
但是,似乎toDict()每一行的调用效率都非常低。有没有更好的办法?
python ×4
apache-spark ×2
pyspark ×2
data.table ×1
dataframe ×1
debugging ×1
pandas ×1
r ×1
random ×1