Pandas DataFrame:多输入列转多输出列的最优实现方法?
更简洁高效的实现方式
你可以直接利用Pandas的apply方法结合result_type='expand'参数,一步完成自定义函数的应用和结果的展开,完全省去中间转换Series的繁琐步骤:
优化后的代码
import pandas as pd def fn(a): return (min(a), max(a), a[0], a[-1]) df = pd.DataFrame([(2, 4, 5, 1, 3), (12, 14, 15, 11, 13), (20, 40, 50, 10, 30)], index=['a', 'b', 'c']) # 直接对每行应用函数并展开结果为DataFrame result_df = df.apply(fn, axis=1, result_type='expand') print(result_df)
输出结果和你原来的实现完全一致:
0 1 2 3 a 1 5 2 3 b 11 15 12 13 c 10 50 20 30
关键说明
axis=1指定对每行应用自定义函数(如果你的需求是处理每列,只需把axis=1改成axis=0)result_type='expand'会自动将函数返回的元组/列表展开为DataFrame的列,无需手动转换values.tolist()- 这个写法直接从原DataFrame生成目标结果,代码更简洁,可读性更强
如果你的自定义函数无法进行向量化改造(必须逐行/列处理),这就是当前最简洁高效的实现方式;如果函数逻辑允许拆分,你也可以用Pandas内置的向量化方法组合实现(比如df.min(axis=1)、df.max(axis=1)等),性能会进一步提升,但这不符合你“必须使用自定义函数”的要求。
内容的提问来源于stack exchange,提问作者Bean Taxi
相关产品推荐
相关产品推荐

