Pandas DataFrame Apply 函数,多个参数

Pandas DataFrame Apply function, multiple arguments

我有一个 Pandas 数据框,其中一列是字符串。我从外部模块导入了一个函数来进行一些正则表达式检查并将此字符串缩减为短分类。

这个有效:

df['PageCLass'] = df['PageClass'].apply(lambda x: PageClassify.page_classify(x))

但是我真正想做的是将另一列 'Rev' 合并到数据框中,该列恰好是浮点数或 NaN 到检查中。

当我这样做时:

df['PageCLass'] = df['PageClass'].apply(lambda x: PageClassify.page_classify(x,df['Rev']))

我在分类函数中对第二个参数进行逻辑检查,我得到了这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我正在寻找一种按值捕获第二个参数值的方法,就像 lambda x: 按值捕获第一个参数值一样。

假设您只想逐行执行此操作,则以下操作应该可行:

df['PageCLass'] = (df['PageClass'] + df['Rev'].apply(str)).apply(lambda x: PageClassify.page_classify(x))

在这里,您只是将两个数据框列连接在一起,然后您可以将该函数应用于新列中的每一行。如果您需要检查 PageClass 和 Rev 的值作为单独的参数,您还可以在连接中添加一个分隔符(例如 '\t'),然后简单地在函数内部拆分:

df['PageCLass'] = (df['PageClass'] + '\t' + df['Rev'].apply(str)).apply(lambda x: PageClassify.page_classify(x))

希望对您有所帮助!

上面的方法没问题我猜它是否有效...在我看来它没有回答问题因为你将两个参数连接成一个。

一种允许您传递两个参数以应用的方法:

df['PageCLass'] = df[['PageClass','Rev']].apply(lambda x: PageClassify.page_classify(*x), axis=1)

我不知道 page_classify 方法是什么样的,但如果它需要两个参数,上面的方法应该有效。这对你有用吗?