首页 > 解决方案 > 如何将具有多个变量的函数应用于 pandas 数据框的列(当无法更改 func 中 var 的顺序时)

问题描述

我想将 func 应用于 pandas DataFrame 的列。这样的 func 采用 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”作为参数传递,结果也是列的元素。

在此处的熊猫文档中: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 的第一个变量必须是系列。如果函数已经给出并且改变变量的顺序是不可能的,我应该如何进行?如果 func 采用多个变量,并且 6 个变量中只有第三个是数据帧系列怎么办?

谢谢。

注意:以下方法可行,但不是有效选项:

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

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

标签: pythonpandasapply

解决方案


您始终可以创建一个 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

推荐阅读