---
# System prepended metadata

title: Virgil - Intro To Pandas Seaborn - S81 Apply
tags: [' IntroPandasSeaborn', ' LearnWorld', Virgil]

---

---
title: Virgil - Intro To Pandas Seaborn - S81 Apply
tags: Virgil, LearnWorld, IntroPandasSeaborn
---
<a target="_blank" href="https://colab.research.google.com/drive/1kp3s4g2T3zIJ5pU2HeYqx_u_hPRZXy0V"><img src="https://www.tensorflow.org/images/colab_logo_32px.png" />Run in Google Colab</a>

## Review about Python 


```python
# Variable
a = 10 + 2
print(a)
```

    12



```python
# Comparison
a == 10
```




    False




```python
# Gán giá trị 10 cho biến a
a = 10
```


```python
# If/Else Condition
# 1 -- if, elif, else _ 
# 2 -- nhớ dấu :
# 3 -- indent 

if a > 10:
    a = a + 5 
    print("a is greater than 10")
elif a < 10:
    print("a is less than 10")
else:
    print("a is equal to 10")
```

## Function

**Function** is a group of related statements that performs a specific task.

- Breaking a program into smaller and modular chunks.
- Makes it more organized and manageable.
- Avoids repetition and makes the code reusable.

![](https://i.imgur.com/WxOQ2dA.png)

Layout of a function:

```python
def function_name(parameters):
    statement(parameters)
    return( )
```




```python
number = 80

if number > 100:
    print('More')
else:
    print('Less or Equal')
```

    Less or Equal



```python
# phím tab
# tab nhiều dòng: bôi đen --> ctrl/cmd + [ hoặc ctrl/cmd + ]  
# define a function
# Tất cả lệnh trong function đều cách 1 indent so với 'def'
def check_number(number):
    if number > 100:
        return 'More'
    else:
        return 'Equal or Less'
```


```python
a = check_number(10004)
```


```python
# print chỉ display
# return trả về kết qủa 
a
```




    'More'



## Apply

The Pandas `apply()` is used to apply a function along an axis of the DataFrame or on values of Series.

Example: Classify if ```tip``` amount > 3 then High, else it is Low.

**Example 1** : Apply on a **Dataframe**

The ```apply``` will apply the function on to the whole row of the dataframe. 

Thus, we need to define a function that takes the whole row as the parameter.


```python
# One row looks like
df.loc[145]['tip']
```




    1.5




```python
def check_tip(row):
    if row['tip'] > 3:
        return 'High'
    else:
        return 'Low'
```


```python
# Apply on the dataframe
df.apply(check_tip, axis=1)
```




    0       Low
    1       Low
    2      High
    3      High
    4      High
           ... 
    239    High
    240     Low
    241     Low
    242     Low
    243     Low
    Length: 244, dtype: object




```python
# Write into the table (tạo 1 cột mới trong bảng)
df['TipType'] = df.apply(check_tip, axis=1)
df
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>total_bill</th>
      <th>tip</th>
      <th>sex</th>
      <th>smoker</th>
      <th>day</th>
      <th>time</th>
      <th>size</th>
      <th>TipType</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>16.99</td>
      <td>1.01</td>
      <td>Female</td>
      <td>No</td>
      <td>Sun</td>
      <td>Dinner</td>
      <td>2</td>
      <td>Low</td>
    </tr>
    <tr>
      <th>1</th>
      <td>10.34</td>
      <td>1.66</td>
      <td>Male</td>
      <td>No</td>
      <td>Sun</td>
      <td>Dinner</td>
      <td>3</td>
      <td>Low</td>
    </tr>
    <tr>
      <th>2</th>
      <td>21.01</td>
      <td>3.50</td>
      <td>Male</td>
      <td>No</td>
      <td>Sun</td>
      <td>Dinner</td>
      <td>3</td>
      <td>High</td>
    </tr>
    <tr>
      <th>3</th>
      <td>23.68</td>
      <td>3.31</td>
      <td>Male</td>
      <td>No</td>
      <td>Sun</td>
      <td>Dinner</td>
      <td>2</td>
      <td>High</td>
    </tr>
    <tr>
      <th>4</th>
      <td>24.59</td>
      <td>3.61</td>
      <td>Female</td>
      <td>No</td>
      <td>Sun</td>
      <td>Dinner</td>
      <td>4</td>
      <td>High</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>239</th>
      <td>29.03</td>
      <td>5.92</td>
      <td>Male</td>
      <td>No</td>
      <td>Sat</td>
      <td>Dinner</td>
      <td>3</td>
      <td>High</td>
    </tr>
    <tr>
      <th>240</th>
      <td>27.18</td>
      <td>2.00</td>
      <td>Female</td>
      <td>Yes</td>
      <td>Sat</td>
      <td>Dinner</td>
      <td>2</td>
      <td>Low</td>
    </tr>
    <tr>
      <th>241</th>
      <td>22.67</td>
      <td>2.00</td>
      <td>Male</td>
      <td>Yes</td>
      <td>Sat</td>
      <td>Dinner</td>
      <td>2</td>
      <td>Low</td>
    </tr>
    <tr>
      <th>242</th>
      <td>17.82</td>
      <td>1.75</td>
      <td>Male</td>
      <td>No</td>
      <td>Sat</td>
      <td>Dinner</td>
      <td>2</td>
      <td>Low</td>
    </tr>
    <tr>
      <th>243</th>
      <td>18.78</td>
      <td>3.00</td>
      <td>Female</td>
      <td>No</td>
      <td>Thur</td>
      <td>Dinner</td>
      <td>2</td>
      <td>Low</td>
    </tr>
  </tbody>
</table>
<p>244 rows × 8 columns</p>
</div>



`axis=1`

![](https://miro.medium.com/max/688/1*dh0MKXECWtM0whVWF6L15Q.png)

`axis=0`

![](https://miro.medium.com/max/632/1*seVq8tGio1GlD8ZigZPIBQ.png)


```python
# Assign it to a column in the dataframe
df['TipType'] = df.apply(check_tip, axis=1)
```

**Example 2**: Apply on a **Series**

The ```apply``` function will be applied on one value at a time. Thus, we need to define the function toward to one value.


```python
df['tip']
```




    0      1.01
    1      1.66
    2      3.50
    3      3.31
    4      3.61
           ... 
    239    5.92
    240    2.00
    241    2.00
    242    1.75
    243    3.00
    Name: tip, Length: 244, dtype: float64




```python
def check_tip(x):
    if x > 3:
        return 'High'
    else:
        return 'Low'
```


```python
# Apply on the Series
df['tip'].apply(check_tip)
```
