小编Dav*_*d D的帖子

在`data.table`中使用动态列名

我想计算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)

r data.table

32
推荐指数
1
解决办法
2万
查看次数

pandas agg和apply函数有什么区别?

我无法弄清楚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 pandas pandas-groupby

28
推荐指数
2
解决办法
2万
查看次数

随机种子需要有多么不同?

考虑这样的代码(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与一个调用有很大不同.我是否需要确保种子数量在后续调用之间存在显着差异,或者种子是否足够(无论如何)?

对于学生:请认识到上面的代码是超简化的

random

13
推荐指数
2
解决办法
6580
查看次数

无法理解"集体智慧"计划中的一句话

我正在研究" 编程集体智慧 ".在第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这不是作业

python debugging

4
推荐指数
1
解决办法
388
查看次数

从PySpark DataFrame中的非null列中选择值

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价值观?

python dataframe apache-spark apache-spark-sql pyspark

4
推荐指数
2
解决办法
3633
查看次数

PySpark行对象:通过变量名称访问行元素

可以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 apache-spark pyspark

3
推荐指数
1
解决办法
4919
查看次数