如何在Polars DataFrame中对所有列应用自定义汇总函数?
在Polars中实现Pandas
df.apply(my_func, axis=0) 的列汇总效果 要在Polars中完成和Pandas df.apply(my_func, axis=0) 相同的列级自定义函数汇总,有几种简洁的实现方式,以下是对应你示例的具体代码:
方法1:使用 pl.select() + map_batches()
这是最贴近Pandas用法的方式,通过pl.all()选中所有列,再用map_batches()对每一列应用自定义函数:
import polars as pl import pandas as pd import numpy as np # 测试数据 data = {'a':[1, 2, 3, 4, 5], 'b': [2, 4, 6, 8, 10]} # Pandas和Polars数据集 df = pd.DataFrame(data) pdf = pl.DataFrame(data) # 用于列汇总的自定义函数 my_func = lambda x: np.log(x.mean()) # Pandas中的实现方式 pd_result = df.apply(my_func, axis=0) print("Pandas结果:") print(pd_result) # Polars中的实现方式 pl_result = pdf.select(pl.all().map_batches(my_func)) print("\nPolars结果:") print(pl_result)
运行后两者输出的数据值完全一致,Pandas返回Series,Polars返回单行DataFrame,结构逻辑对齐。
方法2:使用 agg() 进行聚合汇总
如果你的自定义函数属于聚合类操作(比如示例中的求均值再取对数),也可以用agg()方法实现:
pl_result_agg = pdf.agg(pl.all().map_batches(my_func)) print("\nPolars agg结果:") print(pl_result_agg)
关键说明
- Polars的
map_batches()会将每一列作为Polars Series传入自定义函数,函数处理逻辑和Pandas中一致(示例中x.mean()在Polars Series上同样生效,Polars支持大部分NumPy/Pandas风格的Series方法)。 - 若需要将结果转换为类似Pandas Series的一维结构,可使用
pl_result.to_series()或pl_result.to_numpy()进行格式转换。
内容的提问来源于stack exchange,提问作者Demetri Pananos
相关产品推荐
相关产品推荐

