The apply Table method 
Read Ch 8.1.1 , which describes apply Table method.
 
 
The function signature of apply is:
tbl.apply(func, col1, …, colN)
func takes in the same number of arguments as columns provided. If N columns are provided, then func should take in N arguments.col1, …, colN are names of columns in tbl.For each row, the value in the col1 column is passed in as argument 1, the value in the col2 column is passed in as argument 2, etc. 
 
 
Example 
We have a weather table of high and low temperatures on each day, recorded in Farenheit. We would like to transform these temperatures to Celsius. This example creates a new column, High (C), using the apply method.
=  Table().with_columns("Day" , make_array(1 , 2 , 3 ),"High" , make_array(55.1 , 57.2 , 56.8 ),"Low" , make_array(43.7 , 46 , 45.9 ),"Sky condition" , make_array("Cloudy" , "Sunny" , "Cloudy" )
 
1 
55.1 
43.7 
Cloudy 
 
2 
57.2 
46 
Sunny 
 
3 
56.8 
45.9 
Cloudy 
 
 
 
 
def  celsius(temp):  """converts Fahrenheit to Celsius""" return  (temp -  32 ) *  5 / 9  
The apply method returns an array of values.
apply (celsius, 'High' )
array([ 12.83333333,  14.        ,  13.77777778]) 
 
We can create a new column by assigning this newly created array to a new column name.
"High (C)" ,apply (celsius, 'High' )
 
1 
55.1 
43.7 
Cloudy 
12.8333 
 
2 
57.2 
46 
Sunny 
14 
 
3 
56.8 
45.9 
Cloudy 
13.7778 
 
 
 
 
As practice, try doing the same with the temperatures in the Low column.
 
Applying with Strings 
Task 1 
Make exciting greetings by adding the Greeting column as below.
 
Hanukkah 
Josh 
HAPPY HANUKKAH JOSH 
 
New Year 
Tracy 
HAPPY NEW YEAR TRACY 
 
Birthday 
Jaspreet 
HAPPY BIRTHDAY JASPREET 
 
 
=  Table().with_columns('Holiday' , make_array('Hanukkah' , 'New Year' , 'Birthday' ),'Name' , make_array('Josh' , 'Tracy' , 'Jaspreet' )
 
Hanukkah 
Josh 
 
New Year 
Tracy 
 
Birthday 
Jaspreet 
 
 
 
 
There are various solutions. One reasonable approach:
def  make_greeting(holiday, name):return  "HAPPY "  +  holiday.upper() +  " "  +  name.upper()"Greeting" ,apply (make_greeting, "Holiday" , "Name" )
 
Hanukkah 
Josh 
HAPPY HANUKKAH JOSH 
 
New Year 
Tracy 
HAPPY NEW YEAR TRACY 
 
Birthday 
Jaspreet 
HAPPY BIRTHDAY JASPREET 
 
 
 
 
Here’s another advanced approach, using join:
def  make_greeting(holiday, name):return  ' ' .join(["happy" , holiday, name]).upper()"Greeting" ,apply (make_greeting, "Holiday" , "Name" )
 
Hanukkah 
Josh 
HAPPY HANUKKAH JOSH 
 
New Year 
Tracy 
HAPPY NEW YEAR TRACY 
 
Birthday 
Jaspreet 
HAPPY BIRTHDAY JASPREET 
 
 
 
 
 
Task 2 (Challenge) 
Convert phone numbers. For example, 510-642-3141 should be formatted as (510) 642-3141.
Hint : Try using split. The split function returns a list of strings split by the delimiter; after conversion, lists can be indexed just like an array.
=  Table().with_columns('Residence Hall' , 'Unit 1' , 'Unit 2' , 'Unit 3' , 'Foothill' ,'Clark Kerr' , 'Blackwell' , 'Martinez Commons' ),'Phone' ,'510-642-3141' , '510-642-3143' , '510-642-5391' , '510-642-9703' ,'510-642-6290' , '510-423-3740' , '510-642-8517' )
 
Unit 1 
510-642-3141 
 
Unit 2 
510-642-3143 
 
Unit 3 
510-642-5391 
 
Foothill 
510-642-9703 
 
Clark Kerr 
510-642-6290 
 
Blackwell 
510-423-3740 
 
Martinez Commons 
510-642-8517 
 
 
 
 
One possible approach:
def  format_phone_number(phone):=  np.array(phone.split('-' ))return  "("  +  parts.item(0 ) +  ") "  +  parts.item(1 ) +  "-"  +  parts.item(2 )"Formatted" ,apply (format_phone_number, "Phone" )
 
Unit 1 
510-642-3141 
(510) 642-3141 
 
Unit 2 
510-642-3143 
(510) 642-3143 
 
Unit 3 
510-642-5391 
(510) 642-5391 
 
Foothill 
510-642-9703 
(510) 642-9703 
 
Clark Kerr 
510-642-6290 
(510) 642-6290 
 
Blackwell 
510-423-3740 
(510) 423-3740 
 
Martinez Commons 
510-642-8517 
(510) 642-8517