如何在Pandas中用一次apply方法给不同列应用不同函数?
一次性为DataFrame不同列应用对应函数的方法
有两种简洁的方式可以实现只调用一次方法就为指定列匹配对应函数:
方法1:使用transform(推荐)
pandas的transform方法原生支持传入列名-函数的字典映射,会自动为每列应用对应的函数,代码最简洁:
# 定义列与函数的映射关系 col_func_map = {"A": func1, "B": func2, "C": func3} # 一次性完成所有列的函数应用 df = df.transform(col_func_map)
方法2:使用apply按列处理
如果需要更灵活的列级逻辑,可以用apply配合lambda,根据列名匹配函数后再逐元素处理:
col_func_map = {"A": func1, "B": func2, "C": func3} df = df.apply(lambda col: col.apply(col_func_map[col.name]), axis=0)
额外提示
如果你的func1/func2/func3是可以矢量化的函数(即能直接接收Series作为参数并返回对应结果),直接对列赋值的效率会比apply/transform更高:
df["A"] = func1(df["A"]) df["B"] = func2(df["B"]) df["C"] = func3(df["C"])
虽然是三次赋值,但矢量化操作避免了逐元素循环,在数据量大时性能优势明显。
内容的提问来源于stack exchange,提问作者Setu Kumar Basak
相关产品推荐
相关产品推荐

