2016-03-15 29 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類服裝中。