Pandas2.2 Series
Function application, GroupBy & window
方法 | 描述 |
---|---|
Series.apply() | 用于将一个函数应用到 Series 的每个元素或整个 Series |
Series.agg() | 用于对 Series 数据进行聚合操作 |
Series.aggregate() | 用于对 Series 数据进行聚合操作 |
Series.transform() | 用于对 Series 数据进行转换操作 |
pandas.Series.transform
pandas.Series.transform
是 Pandas 库中 Series
对象的一个方法,用于对 Series
数据进行转换操作。与 apply
方法不同的是,transform
方法要求返回的值必须与原始 Series
的形状相同或可以广播到相同的形状。它通常用于需要对数据进行逐元素转换或生成与原始数据形状一致的结果的场景。
方法签名
Series.transform(func, axis=0, *args, **kwargs)
func
: 要应用的转换函数。可以是单个函数、函数列表或字典。- 单个函数:如
lambda x: x + 1
。 - 函数列表:如
[lambda x: x + 1, lambda x: x * 2]
。 - 字典:键为新的列名,值为要应用的函数。
- 单个函数:如
axis
: 指定轴,默认为 0,表示沿索引方向进行转换。*args
: 传递给func
的位置参数。**kwargs
: 传递给func
的关键字参数。
主要特点
- 保持形状一致性:
transform
返回的结果必须与原始Series
形状相同或可以广播到相同的形状。 - 支持多种输入形式:可以使用单个函数、函数列表或字典来指定多个转换操作。
- 逐元素操作:适用于需要对每个元素进行转换的场景。
- 灵活的数据处理:可以传递额外参数以处理更复杂的逻辑。
示例及结果
示例1:使用单个转换函数
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4])
# 使用 transform 方法应用单个转换函数
result = s.transform(lambda x: x + 1)
print("使用单个转换函数 lambda x: x + 1 结果:")
print(result)
输出结果:
使用单个转换函数 lambda x: x + 1 结果:
0 2
1 3
2 4
3 5
dtype: int64
在这个例子中,lambda x: x + 1
函数被应用到 Series
的每个元素上,返回的结果是一个新的 Series
,其中每个元素都增加了 1。
示例2:使用多个转换函数
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4])
# 使用 transform 方法应用多个转换函数
result = s.transform([lambda x: x + 1, lambda x: x * 2])
print("使用多个转换函数结果:")
print(result)
输出结果:
使用多个转换函数结果:
<lambda>
0 2
1 4
2 6
3 8
在这个例子中,两个转换函数 lambda x: x + 1
和 lambda x: x * 2
被应用到 Series
上,返回的结果是一个包含两列的新 DataFrame
,每列对应一个转换函数的结果。
示例3:使用字典指定新列名
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4])
# 使用 transform 方法应用多个转换函数并指定新列名
result = s.transform({'add_one': lambda x: x + 1, 'double': lambda x: x * 2})
print("使用字典指定新列名结果:")
print(result)
输出结果:
使用字典指定新列名结果:
add_one double
0 2 2
1 3 4
2 4 6
3 5 8
在这个例子中,通过字典指定了每个转换函数对应的新列名,返回的结果是一个包含两列的新 DataFrame
,每列对应一个转换函数的结果,并且列名已更改。
示例4:使用内置函数
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4])
# 使用 transform 方法应用内置函数
result = s.transform('sqrt')
print("使用内置函数 sqrt 结果:")
print(result)
输出结果:
使用内置函数 sqrt 结果:
0 1.000000
1 1.414214
2 1.732051
3 2.000000
dtype: float64
在这个例子中,Pandas 内置的 sqrt
函数被应用到 Series
的每个元素上,返回的结果是一个新的 Series
,其中每个元素都是原元素的平方根。
示例5:传递额外参数
import pandas as pd
# 创建一个 Series
s = pd.Series([1, 2, 3, 4])
# 定义一个带有额外参数的自定义转换函数
def custom_transform(x, factor):
return x * factor
# 使用 transform 方法应用自定义转换函数,并传递额外参数
result = s.transform(custom_transform, factor=3)
print("传递额外参数结果:")
print(result)
输出结果:
传递额外参数结果:
0 3
1 6
2 9
3 12
dtype: int64
在这个例子中,custom_transform
自定义函数被应用到 Series
的每个元素上,并通过 kwargs
参数传递了一个额外的参数 factor=3
,返回的结果是一个新的 Series
,其中每个元素都是原元素的三倍。
总结
pandas.Series.transform
方法在数据分析和处理中非常有用,特别是在需要对 Series
进行逐元素转换或生成与原始数据形状一致的结果时。它支持多种输入形式、传递额外参数以及处理不同类型的数据,使得数据转换更加灵活和高效。通过这些示例,可以看到 transform()
方法在不同场景下的应用及其强大功能。
请注意,transform
方法的主要特点是返回的结果必须与原始 Series
形状相同或可以广播到相同的形状,这与 apply
方法有所不同。