如何为Pandas DataFrame每行应用自定义函数并按列追加结果?
如何为Pandas DataFrame逐行应用自定义函数并追加结果
需求
- 自定义函数需使用目标DataFrame(df1)某一列的值
- 函数需引用另一个DataFrame(df2)的数据进行计算
- 将计算结果按列追加到df1中
示例数据
import pandas as pd from IPython.display import display df1 = pd.DataFrame([1, 2, 3], columns=["x"]) df2 = pd.DataFrame({"set1": [0, 0, 0, 0], "set2": [100, 200, 300, 400]}) display(df1, df2)
自定义函数
先修正函数参数,使其适配逐行处理逻辑(接收单个x值):
def myfunc(df2, x): # 自定义计算逻辑 ans = df2["set1"] + df2["set2"] * x return ans
期望输出
| x | run1 | run2 | run3 | run4 | |
|---|---|---|---|---|---|
| 0 | 1 | 100 | 200 | 300 | 400 |
| 1 | 2 | 200 | 400 | 600 | 800 |
| 2 | 3 | 300 | 600 | 900 | 1200 |
一行代码实现方案
方案1:apply结合concat
通过df1["x"].apply()逐行传入x值,将返回结果转为DataFrame并重命名列后,与原df1合并:
df1 = pd.concat([df1, df1["x"].apply(lambda val: myfunc(df2, val)).rename(lambda idx: f"run{idx+1}")], axis=1)
方案2:向量化广播(高效优先)
利用Pandas广播特性直接完成批量计算,避免逐行循环,处理大规模数据时效率更高:
df1 = pd.concat([df1, (df2["set1"] + df2["set2"].values[:, None] * df1["x"].values).T.add_prefix("run")], axis=1)
两种方案均可得到目标结果,根据数据规模选择即可。
内容的提问来源于stack exchange,提问作者a11
相关产品推荐
相关产品推荐

