如何将具有多个变量的函数应用于 pandas 数据框的列(当无法更改 func 中变量的顺序时)

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

我想将一个函数应用于 pandas DataFrame 的列。这样的函数需要 DF 的一个字符串和一列。

如下:

def check_it(language,text):
    print(language)
    if language == 'EN':
        result = 'DNA' in text
    else:
        result ='NO'
    return result
df = pd.DataFrame({'ID':['1','2','3'], 'col_1': ['DNA','sdgasdf','sdfsdf'], 'col_2':['sdfsf sdf s','DNA','sdgasdf']})

df['col_3']=df['col_2'].apply(check_it, args=('EN',))
df

这不会产生所需的结果,因为即使在函数内打印“语言”时将“EN”作为参数传递到第一个位置,结果也是列中的元素。

在 pandas 文档中:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.apply.html 这个例子并不是 100% 清楚:

def subtract_custom_value(x, custom_value):
    return x - custom_value
s.apply(subtract_custom_value, args=(5,))

看起来 func 的第一个变量必须是系列。如果函数已经给出并且无法更改变量的顺序,我应该如何进行?如果函数采用多个变量并且 6 个变量中只有第三个是数据帧的系列怎么办?

注意

以下内容可行,但不是有效的选项:

def check_it(text,language):
...
df['col_3']=df['col_2'].apply(check_SECA, args=('EN',))

因为我无法更改函数中变量的顺序。

python pandas apply
1个回答
2
投票

您始终可以创建一个 lambda,并在主体中根据需要调用您的函数:

df['col_3']=df['col_2'].apply(lambda text: check_it('EN', text))
df

  ID    col_1        col_2  col_3
0  1      DNA  sdfsf sdf s  False
1  2  sdgasdf          DNA   True
2  3   sdfsdf      sdgasdf  False
© www.soinside.com 2019 - 2024. All rights reserved.