HOWTO · Pandas

將 Lambda 函式應用於 Pandas DataFrame

本指南說明如何使用 DataFrame.assign() 和 DataFrame.apply() 方法將 Lambda 函式應用於 pandas DataFrame。

本頁內容

lambda 函式解決了 Pandas python 中的各種資料科學問題。我們可以在 pandas DataFrame 中的行和列上應用 lambda 函式。

我們將在本文中探討如何將 lambda 函式應用於 pandas DataFrame。

lambda 函式在 pandas DataFrame 上有多種應用,例如 filter()、map() 和 條件語句,我們將在本文中通過一些示例進行解釋。

Lambda 函式

Lambda 函式包含一個表示式。

Lambda 函式是一個小函式,也可以用作匿名函式,這意味著它不需要任何名稱。lambda 函式對於用更少的程式碼解決小問題很有用。

以下語法用於在 pandas DataFrame 上應用 lambda 函式:

dataframe.apply(lambda x: x + 2)

使用 DataFrame.assign() 方法在單個列上應用 Lambda 函式

dataframe.assign() 方法將 Lambda 函式應用於單個列。讓我們舉個例子。

在下面的示例中,我們在 Students Marks 列上應用了 lambda 函式。應用 Lambda 函式後,計算學生百分比並將其儲存在新的百分比列中。

請參閱以下實現以在 Pandas DataFrame 中的單個列上應用 lambda 函式。

示例程式碼:

import pandas as pd

# initialization of list
students_record = [
    ["Samreena", 900],
    ["Mehwish", 750],
    ["Asif", 895],
    ["Mirha", 800],
    ["Affan", 850],
    ["Raees", 950],
]

# pandas dataframe creation
dataframe = pd.DataFrame(students_record, columns=["Student Names", "Student Marks"])

# using Lambda function
dataframe1 = dataframe.assign(Percentage=lambda x: (x["Student Marks"] / 1000 * 100))

# display dataframe
print(dataframe1)

輸出:

	Student Names	Student Marks	Percentage
0	Samreena	             900	90.0
1	Mehwish	                 750	75.0
2	Asif	                 895	89.5
3	Mirha	                 800	80.0
4	Affan	                 850	85.0
5	Raees	                 950	95.0

使用 DataFrame.assign() 方法在多列上應用 Lambda 函式

我們還可以使用 Pandas DataFrame 中的 dataframe.assign() 方法將 Lambda 函式應用於多個列。

例如,我們有四列 Student Names、Computer、Math 和 Physics。我們在 Computer、Math 和 Physics 等多個主題列上應用了一個 Lambda 函式來計算儲存在 Marks_Obtained 列中的獲得的分數。

實現以下示例。

示例程式碼:

import pandas as pd

# nested list initialization
values_list = [
    ["Samreena", 85, 75, 100],
    ["Mehwish", 90, 75, 90],
    ["Asif", 95, 82, 80],
    ["Mirha", 75, 88, 68],
    ["Affan", 80, 63, 70],
    ["Raees", 91, 64, 90],
]

# pandas dataframe creation
df = pd.DataFrame(values_list, columns=["Student Names", "Computer", "Math", "Physics"])

# applying Lambda function

dataframe = df.assign(
    Marks_Obtained=lambda x: (x["Computer"] + x["Math"] + x["Physics"])
)

# display dataframe
print(dataframe)

輸出:

Student Names	Computer	Math	Physics	 Marks_Obtained
0	Samreena	85	        75	      100	 260
1	Mehwish	    90	        75	       90	 255
2	Asif	    95	        82	       80	 257
3	Mirha	    75	        88	       68	 231
4	Affan	    80	        63	       70	 213
5	Raees	    91	        64	       90	 245  

使用 DataFrame.apply() 方法在單行上應用 Lambda 函式

dataframe.apply() 方法將 Lambda 函式應用於單行。

例如,我們將 lambda 函式應用於單行 axis=1。使用 lambda 函式,我們將每個人的月收入增加了 1000。

示例程式碼:

import pandas as pd

df = pd.DataFrame(
    {
        "ID": [1, 2, 3, 4, 5],
        "Names": ["Samreena", "Asif", "Mirha", "Affan", "Mahwish"],
        "Age": [20, 25, 15, 10, 30],
        "Monthly Income": [4000, 6000, 5000, 2000, 8000],
    }
)
df["Monthly Income"] = df.apply(lambda x: x["Monthly Income"] + 1000, axis=1)
print(df)

輸出:

	ID	Names	    Age	 Monthly Income
0	1	Samreena	 20	 5000
1	2	Asif	     25	 7000
2	3	Mirha	     15	 6000
3	4	Affan	     10	 3000
4	5	Mahwish	     30	 9000

通過應用 Lambda 函式過濾資料

我們還可以通過應用 Lambda 函式來過濾所需的資料。

filter() 函式採用 pandas 系列和一個 lambda 函式。Lambda 函式適用於過濾給定系列後返回特定結果的 pandas 系列。

在下面的示例中,我們在 Age 列上應用了 lambda 函式並過濾了 25 歲以下的人的年齡。

示例程式碼:

import pandas as pd

df = pd.DataFrame(
    {
        "ID": [1, 2, 3, 4, 5],
        "Names": ["Samreena", "Asif", "Mirha", "Affan", "Mahwish"],
        "Age": [20, 25, 15, 10, 30],
        "Monthly Income": [4000, 6000, 5000, 2000, 8000],
    }
)
print(list(filter(lambda x: x < 25, df["Age"])))

輸出:

[20, 15, 10]

通過應用 Lambda 函式來使用 map() 函式

我們可以使用 map() 和 lambda 函式。

lambda 函式應用於系列以根據輸入對應關係對映系列。此功能對於用其他值替換或替換系列很有用。

當我們使用 map() 函式時,輸入大小將等於輸出大小。要了解 map() 函式的概念,請參閱以下原始碼實現。

示例程式碼:

import pandas as pd

df = pd.DataFrame(
    {
        "ID": [1, 2, 3, 4, 5],
        "Names": ["Samreena", "Asif", "Mirha", "Affan", "Mahwish"],
        "Age": [20, 25, 15, 10, 30],
        "Monthly Income": [4000, 6000, 5000, 2000, 8000],
    }
)
df["Monthly Income"] = list(map(lambda x: int(x + x * 0.5), df["Monthly Income"]))
print(df)

輸出:

    ID	  Names	    Age	 Monthly Income
0	1	Samreena	20	6000
1	2	Asif	    25	9000
2	3	Mirha	    15	7500
3	4	Affan	    10	3000
4	5	Mahwish	    30	12000

通過應用 Lambda 函式使用 if-else 語句

我們還可以使用 lambda 函式對 pandas dataframes 應用條件語句。

在以下示例中,我們在 lambda 函式中使用了條件語句。我們將條件應用於 Monthly Income 列。

如果月收入大於等於 5000,在 Category 欄內新增 Stable;否則,新增 UnStable。

示例程式碼:

import pandas as pd

df = pd.DataFrame(
    {
        "ID": [1, 2, 3, 4, 5],
        "Names": ["Samreena", "Asif", "Mirha", "Affan", "Mahwish"],
        "Age": [20, 25, 15, 10, 30],
        "Monthly Income": [4000, 6000, 5000, 2000, 8000],
    }
)
df["Category"] = df["Monthly Income"].apply(
    lambda x: "Stable" if x >= 5000 else "UnStable"
)
print(df)

輸出:

    ID	 Names	    Age	 Monthly Income	 Category
0	1	Samreena	20	    4000	    UnStable
1	2	Asif	    25	    6000	    Stable
2	3	Mirha	    15	    5000	    Stable
3	4	Affan	    10	    2000	    UnStable
4	5	Mahwish	    30	    8000	    Stable

まとめ

我們實現了在 Pandas DataFrame 上應用 Lambda 函式的各種方法。我們已經看到如何使用 dataframe.assign() 和 dataframe.apply() 方法在行和列上應用 lambda 函式。

我們在 pandas DataFrame 系列上演示了 lambda 函式的不同應用,例如 filter() 函式、map() 函式、條件語句等。