將函式應用於 Pandas DataFrame 中的多個列

本文將介紹如何將函式應用於 Pandas DataFrame 中的多個列。在所有示例程式碼中,我們將使用以下相同的 DataFrame。

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

輸出:

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6

使用 apply() 將函式應用到 Pandas 中的列

apply() 方法允許對整個 DataFrame 應用一個函式,可以跨列或跨行。我們將引數 axis 設定為 0 代表行,1 代表列。

在下面的例子中,我們將使用前面定義的函式來遞增示例 DataFrame 的值。

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

def x(a):
    return a + 1 

df_new  = df.apply(x, axis = 1)

print("The original dataframe:")
print(df)
print("The new dataframe:")
print(df_new)

輸出:

The original dataframe:
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
The new dataframe:
   a   b   c   d
0  6   7   8   9
1  2  10  13  15
2  5   9  11   7

我們也可以將一個函式應用於多列,如下圖所示。

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

print("The original dataframe:")
print(df)

def func(x):
    return x[0] + x[1]

df['e']  = df.apply(func, axis = 1)

print("The new dataframe:")
print(df)

輸出:

The original dataframe:
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
The new dataframe:
   a  b   c   d   e
0  5  6   7   8  11
1  1  9  12  14  10
2  4  8  10   6  12

新新增的 e 列是 ab 列中資料的總和。DataFrame 本身是傳遞給函式的隱藏引數。可以像上面的例子一樣用索引來訪問列,或者用列名來訪問,如下所示。

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

print("The original dataframe:")
print(df)

df['e']  = df.apply(lambda x: x.a+x.b, axis = 1)

print("The new dataframe:")
print(df)

它執行的操作和上面的例子一樣。我們在這裡使用了一個 lambda 函式。x.ax.b 指的是 DataFrame 中的列 ab

相關文章 - Pandas DataFrame

  • 如何將 Python 字典轉換為 Pandas DataFrame
  • 如何在 Pandas 中將 DataFrame 列轉換為字串