应用一个用户定义的函数,传递kwarg,其中值存在于多个列中



如果这个问题得到了回答,请原谅,我在这里找不到任何符合我需求的东西。

我有一个数据帧,它混合了浮点字段和字符串字段。它看起来有点像

data = {'df_to_look_at':['A','B'], 'data_to_use':[100,200]}

我有一个函数,它使用第一列来选择数据帧,使用第二列来查找要返回的值。我想用返回的值创建一个新列。

我的功能类似于-

def find_value(col_a, col_b):

#set lookup table based on argument
if col_a == 'A':
table = table_a
elif col_a == 'B':
table = table_b
#Find the value based on column b, set it to the adj variable, and return the adj variable
adj = table.loc[(table['Term']==B), 'Adj'].values

我想运行一行来创建一个新的列,看起来像这个

df['new_val'] = df.apply(find_value, col_a = df['df_to_look_at'], col_b = df['data_to_use'])

在我的实际代码中,我的函数中大约有5个参数,其中一个用于设置要查看的数据帧,其他参数是查找新列所需值的标准。到目前为止,我已经学会了如何将kwargs传递到应用函数中,但只能作为绝对值,如3或"A",而不是"A";列X"中的这一行中的值;

问的第一个问题,我希望我能理解

谢谢你的帮助!

我会采取稍微不同的方法。Apply将列或行发送到您定义的函数。因此,以下将是解决您问题的另一种方法(可能也是一种更快的方法(。

def find_value(row):
#set lookup table based on argument
if row['df_to_look_at'] == 'A':
table = table_a
elif row['data_to_use'] == 'B':
table = table_b
adj = table.loc[(table['Term']==B), 'Adj'].values

#apply across rows
df.apply(find_value, axis = 1)

最新更新