Pandas2.2 DataFrame
Function application, GroupBy & window
方法 | 描述 |
---|---|
DataFrame.apply(func[, axis, raw, …]) | 用于沿 DataFrame 的轴(行或列)应用一个函数 |
DataFrame.map(func[, na_action]) | 用于对 DataFrame 的每个元素应用一个函数 |
DataFrame.applymap(func[, na_action]) | 用于对 DataFrame 中的每一个元素应用一个函数 |
DataFrame.pipe(func, *args, **kwargs) | 用于实现链式编程风格的方法 |
DataFrame.agg([func, axis]) | 用于对 DataFrame 的数据进行聚合操作 |
DataFrame.aggregate([func, axis]) | 用于对 DataFrame 进行聚合操作的方法 |
DataFrame.transform(func[, axis]) | 用于对 DataFrame 的列或行应用函数 |
pandas.DataFrame.transform()
pandas.DataFrame.transform
方法用于对 DataFrame 的列或行应用函数,返回与原数据形状相同或列扩展后的结果。以下为详细说明及示例:
语法
DataFrame.transform(func, axis=0)
- func:函数、字符串、列表或字典。支持的函数需返回与原数据相同长度的序列。
- axis:默认为
0
(按列处理);1
表示按行处理。
示例
示例 1:应用单个函数(按列)
对每列元素减去列平均值:
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.transform(lambda x: x - x.mean())
print(result)
输出:
A B
0 -1 -1
1 0 0
2 1 1
解释:列 A
的平均值为 2
,列 B
的平均值为 5
,每个元素减去对应列的平均值。
示例 2:使用字符串函数名
应用平方根函数 'sqrt'
:
result = df.transform('sqrt')
print(result)
输出:
A B
0 1.000000 2.000000
1 1.414214 2.236068
2 1.732051 2.449490
示例 3:传递函数列表
对每列应用多个函数,生成层次化列:
result = df.transform([np.sqrt, np.exp])
print(result)
输出:
A B
sqrt exp sqrt exp
0 1.000000 2.718282 2.000000 54.598150
1 1.414214 7.389056 2.236068 148.413159
2 1.732051 20.085537 2.449490 403.428793
解释:每列应用 sqrt
和 exp
函数,生成多列结果。
示例 4:使用字典指定列函数
对列 A
应用平方根,列 B
应用加倍:
result = df.transform({'A': np.sqrt, 'B': lambda x: x * 2})
print(result)
输出:
A B
0 1.000000 8
1 1.414214 10
2 1.732051 12
示例 5:按行处理(axis=1
)
对每行元素进行归一化(元素减去行最小值):
result = df.transform(lambda x: x - x.min(), axis=1)
print(result)
输出:
A B
0 0 3
1 0 3
2 0 3
解释:每行的最小值分别为 1
, 2
, 3
,各元素减去对应行的最小值。
示例 6:按行应用返回相同长度的函数
每行元素乘以该行的和:
result = df.transform(lambda x: x * x.sum(), axis=1)
print(result)
输出:
A B
0 5 20
1 14 35
2 27 54
解释:第一行和为 5
,第二行为 7
,第三行为 9
,元素分别乘以对应行的和。
注意事项
- 形状一致性:函数必须返回与原数据相同长度的序列。例如,聚合函数(如
sum
)直接使用会报错。 - 列扩展:传递函数列表或字典时,结果可能扩展列(层次化索引)。
- 行处理:当
axis=1
时,函数需处理行(Series
),返回相同长度的结果。