2016-03-15 59 views
0

我想根据星期数和星期几对数据框进行排序。如何定义数据框的排序顺序?

周数变量是双倍数。

星期几是文本(星期一,星期二,星期三,星期四,星期五,星期六,星期日)。

这里是我的数据框:

week_number | day_of_week | job_count | eff_rate 
----------------------------------------------------- 
1   | Fri   | 30   | 70 
1   | Mon   | 50   | 80  
1   | Sat   | 340  | 20 
1   | Sun   | 1   | 8 
1   | Thu   | 3   | 40 
1   | Tue   | 4   | 10 
1   | Wed   | 50   | 70 
2   | Fri   | 120  | 180 
2   | Mon   | 12   | 80 
2   | Sat   | 11   | 9 
2   | Sun   | 80   | 11 
2   | Tue   | 60   | 14 
2   | Thu   | 4   | 23 
2   | Wed   | 1   | 50 

我认为我会需要定义我定义排序应该如何订购变量的内容的功能。假设这个函数叫做manualsort。 manualsort()看起来像这样可以像这样使用它?

df.sort(asc("week_number"), manualsort("day_of_week")) 

其结果将是这样的:

week_number | day_of_week | job_count | eff_rate 
----------------------------------------------------- 
1   | Mon   | 50   | 80 
1   | Tue   | 4   | 10  
1   | Wed   | 50   | 70 
1   | Thu   | 3   | 40 
1   | Fri   | 120  | 180 
1   | Sat   | 340  | 20 
1   | Sun   | 1   | 8 
+0

在你得到可怕的低估之前,你到目前为止试过了什么?你能向我们展示不符合你想要的方式的代码吗? – wheaties

回答

0

我是新来的Scala和不知道如何编写一个函数

Scala的功能如下格式你描述的;但有时一个例子是不是模板更为有用

def addThem(a:Int, b:Int) : Int = { 
    var sum:Int = 0 
    sum = a + b 
    return sum 
} 

要点:

  • 项目在函数的括号中的变量传递给 功能。
  • 这些项目必须符合的类型是变量名称后面的 ,冒号:作为分隔符。
  • 作为参数传递的变量用逗号分隔。
  • 如果函数已声明的(而不是推断)返回类型,它是“类型的函数签名的”,因此它涉及函数签名后,使用相同的“结肠约束型”图案(如def getName() : String
  • 之后的等号分配一个代码块给函数定义。代码块必须具有带功能签名的兼容退出类型(在这种情况下,代码块必须返回与Int兼容的内容)
  • 代码块中的变量定义格式相同,但有时允许推断类型。

有了这些规则,我相信你将能够开始编写一些功能。对于Sorting,除了在Scala中有更多的方法来完成它之外,您可以有效地提供一个Java Comparator的Scala版本,因为您不需要将该函数包装在面向对象的Comparator类服装中。