如何对pandas DataFrame中的每一行应用(可能)不同的callable

ddrv8njm  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(121)

我有一些DataFrame s,每个都有相同的行数。input_df包含输入数据,param_df包含用于计算的参数,output_df包含输出数据。param_df中的一列包含应该应用于每行的函数。
在下面的简单MWE中,我们希望其中一个函数应用于前五行,另一个函数应用于后五行。
我的问题是我如何才能做到这一点而不笨拙的列表理解?看起来我应该能够使用像mapapply这样的东西,但我还没有解决如何在每行的基础上应用callable。

import pandas as pd
import numpy as np

def func_1(in_val, a, b):
    return in_val + a + b

def func_2(in_val, a, b):
    return in_val + (2 * (a + b))

input_df = pd.DataFrame(data=[1 for row in range(10)],
                  columns=["GR"])

output_df = pd.DataFrame(data=[np.nan for row in range(10)],
                  columns=["VCLGR"])

param_df = pd.DataFrame(data=[[5, 10] for row in range(10)],
                        columns=["x", "y"])

# Add the callables to the param_df
param_df["method"] = func_1
param_df.loc[5:, "method"] = func_2

# Compute the output for each row using the function specified
output_df["VCLGR"] = [param_df["method"][i](input_df["GR"][i], param_df["x"][i], param_df["y"][i]) for i in range(len(input_df))]

字符串

dhxwm5r4

dhxwm5r41#

你可以使用一个函数,它接受一个框架行作为参数,并使用它来调用存储在框架中的函数。

def indirect(row):
  return row['method'](row['GR'], row['x'], row['y'])

output_df["VCLGR_2"] = pd.concat(
    [
      param_df,
      input_df
    ],
    axis=1
  ).apply(
    indirect,
    axis=1
  )

字符串
https://trinket.io/python3/0183496178

相关问题