You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效在Pandas DataFrame各行应用函数并将返回值转为列?

高效将返回字典的函数应用到Pandas DataFrame每行并扩展列

需求场景

需要将一个返回字典的函数应用到Pandas DataFrame的每一行,把字典中的键作为新列名、值作为对应列的内容,合并到原DataFrame中。示例代码如下:

import pandas as pd
def fu(myArg):
    return {"one":myArg,"two":20}
li = [10,20]
df = pd.DataFrame(li,columns=["myArg"])

期望输出结果:

myArg  one  two
0      10   10   20
1      20   20   20

高效实现方法

方法一:apply结合pd.Series快速扩展列

利用apply将函数作用于目标列的每个元素,把返回的字典转为pd.Series生成新的DataFrame,再通过join合并到原DataFrame:

# 生成函数返回结果的DataFrame
func_result = df['myArg'].apply(lambda x: pd.Series(fu(x)))
# 合并原DataFrame和结果DataFrame
result_df = df.join(func_result)

这种方法简洁直观,适合函数仅依赖单个列的场景。

方法二:针对整行数据的函数应用

如果函数需要使用整行的多个字段作为参数,可指定apply的axis=1参数作用于每行,再转为pd.Series:

# 修改函数以接收整行数据
def fu_row(row):
    return {"one": row['myArg'], "two": 20}

# 应用函数并合并结果
func_result = df.apply(fu_row, axis=1).apply(pd.Series)
result_df = df.join(func_result)

方法三:矢量化操作优化性能

如果函数逻辑可以拆解为Pandas矢量化操作,完全可以避免逐行处理,性能会大幅提升。比如示例中one列等于myArg,two列是固定值20,直接赋值即可:

result_df = df.copy()
result_df['one'] = result_df['myArg']
result_df['two'] = 20

这种方式是Pandas中性能最优的方案,适合有固定逻辑或可矢量化的场景。

内容的提问来源于stack exchange,提问作者Fredrik Nylén

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:54:58