如何将(可能)不同的可调用应用到 pandas DataFrame 中的每一行

问题描述 投票:0回答:1

我有许多

DataFrame
,每个都有相同的行数。
input_df
包含输入数据,
param_df
包含用于计算的参数,
output_df
包含输出数据。
param_df
中的一列包含应应用于每一行的函数。

在下面的简单 MWE 中,我们希望其中一个函数应用于前五行,另一个函数应用于最后五行。

我的问题是如何在没有笨拙的列表理解的情况下做到这一点?看来我应该能够使用

map
apply
之类的东西,但我还没有弄清楚如何在每行基础上应用可调用。

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))]

python pandas dataframe series callable
1个回答
0
投票

您可以使用一个以数据帧行作为参数的函数,并使用它来调用存储在数据帧中的函数...

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

© www.soinside.com 2019 - 2024. All rights reserved.