將 Lambda 函式應用於 Pandas DataFrame

Samreena Aslam 2023年1月30日
  1. Lambda 函式
  2. 使用 DataFrame.assign() 方法在單個列上應用 Lambda 函式
  3. 使用 DataFrame.assign() 方法在多列上應用 Lambda 函式
  4. 使用 DataFrame.apply() 方法在單行上應用 Lambda 函式
  5. 通過應用 Lambda 函式過濾資料
  6. 通過應用 Lambda 函式來使用 map() 函式
  7. 通過應用 Lambda 函式使用 if-else 語句
  8. まとめ
將 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 NamesComputerMathPhysics。我們在 ComputerMathPhysics 等多個主題列上應用了一個 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() 函式、條件語句等。

相關文章 - Pandas DataFrame