当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame transform方法用法及代码示例


Pandas DataFrame.transform(~) 方法应用一个函数来转换源 DataFrame 的行或列。请注意,返回了新的DataFrame,并且源DataFrame保持不变。

参数

1.func | functionstringlistdict

应用于源 DataFrame 的行或列的转换。如果传递一个函数,那么它会接受一个 Series 或 DataFrame 作为参数。

允许的值如下:

  • 函数(例如 np.mean )

  • 字符串形式的函数名称(例如 "np.mean" )

  • 上述两者的列表(例如 [np.mean, "np.max"] )

  • 字典:

    • key:行/列标签

    • value:函数、函数名称或此类列表

2. axis | list | optional

是否按行或按列应用转换:

说明

0"index"

变换每一列。

1"columns"

变换每一行。

默认情况下,axis=0

3. args | any

您想要传递给 func 的位置参数。

4. kwargs | any

要传递给 func 的关键字参数。

返回值

一个新的DataFrame,其形状与源 DataFrame 相同。

例子

基本用法

考虑以下 DataFrame :

df = pd.DataFrame({"A":[-3,4],"B":[5,-6]})
df



   A   B
0  -3  5
1  4   -6

应用 NumPy 的 abs(~) 方法,该方法返回输入的绝对值:

df.transform(np.abs)   # or "np.abs"



   A  B
0  3  5
1  4  6

传入一个函数

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]})
df



   A  B
0  3  5
1  4  6

我们可以传入一个自定义函数,如下所示:

def foo(col):
 return 2 * col if np.sum(col) >= 10 else col
df.transform(foo)



   A  B
0  3  10
1  4  12

在这里,我们的自定义函数 foo 接受参数 col ,它是 DataFrame ( Series ) 的单列。

传入多个函数

考虑以下 DataFrame :

df = pd.DataFrame({"A":[-3,4],"B":[-5,6]})
df



   A   B
0  -3  -5
1  4   6

要应用多个转换,请传入一个列表,如下所示:

df.transform([np.abs, lambda x: x + 1])



   A                     B
   absolute  <lambda_0>  absolute  <lambda_0>
0     3         -2          5         -4
1     4         5           6         7

注意这两个变换是如何进行的独立的,也就是说,这两个变换都应用于原始值。

变换每一列

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]})
df



   A  B
0  3  5
1  4  6

默认情况下, axis=0 ,这意味着我们正在转换每一列:

def foo(col):
 return 2 * col if np.sum(col) >= 10 else col
df.transform(foo)   # axis=0



   A  B
0  3  10
1  4  12

变换每一行

考虑与之前相同的DataFrame:

df = pd.DataFrame({"A":[3,4],"B":[5,6]})
df



   A  B
0  3  5
1  4  6

要转换每一行,请传入 axis=1,如下所示:

def foo(row):   # row is a Series representing a single row
 return 2 * row if np.sum(row) >= 10 else row
df.transform(foo, axis=1)



   A  B
0  3  5
1  8  12

仅转换某些列

考虑与之前相同的DataFrame:

df = pd.DataFrame({"A":[3,4],"B":[5,6],"C":[7,8]})
df



   A  B  C
0  3  5  7
1  4  6  8

默认情况下,transform(~) 方法将转换所有列 ( axis=0 ) 或所有行 ( axis=1 )。

要转换某些列,请先选择要转换的列:

def foo(val):
 return val * 3
# Here, we are transforming just columns A and B
df_new_cols = df[["A","B"]].transform(foo)
df_new_cols



   A   B
0  9   15
1  12  18

此处,返回具有转换列的新DataFrame,而原始DataFrame df 保持不变。如果你想替换原来的列,那么:

def foo(val):
 return val * 3
df_new_cols = df[["A","B"]].transform(foo)
df[["A","B"]] = df_new_cols
df



   A   B   C
0  9   15  7
1  12  18  8

传递参数

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]})
df



   A  B
0  3  5
1  4  6

将参数传递给 func

def foo(x, threshold):
 return 2 * x if np.sum(x) >= threshold else x
df.transform(foo, threshold=10)



   A  B
0  3  10
1  4  12

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | transform method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。