將函式應用於 Pandas DataFrame 中的多個列
Manav Narula
2020年12月19日
本文將介紹如何將函式應用於 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
列是 a
和 b
列中資料的總和。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.a
和 x.b
指的是 DataFrame 中的列 a
和 b
。
作者: Manav Narula
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn