使用对多个列应用功能,基于其他列的值将新列创建到数据框

瓦伦·维什诺伊

我正在使用Apply函数根据现有列[TV_TIC和ERRORS]值在数据帧中创建一个新列,即ERROR_TV_TIC。我不确定自己在做什么错。在某些情况下它可以工作,而在另一些情况下则不行,并引发错误。

数据框:

ERRORS|TV_TIC
|2.02101E+41
['Length of Underlying Symbol for Option Contract is exceeding allowed limits(10 chars)']|nan
['Future Option Indicator is missing']|nan
['Trade Id is missing', 'Future Option Indicator is missing']|nan
['Trade Id is missing', 'Future Option Indicator is missing']|nan

工作时的代码:

def validate_tv_tic(trades):
    tv_tiv_errors = list() 
    if pd.isnull(trades['TV_TIC']):
        tv_tiv_errors.append("Initial validations passed still TV_TIC missing")
    if pd.notnull(trades['TV_TIC']) and len(trades['TV_TIC']) != 42:
        tv_tiv_errors.append("Initial validations passed and TV_TIC is also generated but length is != 42 chars")
    return tv_tiv_errors if len(tv_tiv_errors) > 0 else np.nan

trades['ERROR_TV_TIC'] = trades.apply(validate_tv_tic, axis=1)

无法正常工作时的代码:现在条件在系列的2列上,并且我确保我传递的是“&”而不是“ and”

def validate_tv_tic(trades):
    tv_tiv_errors = list()
    if pd.isnull(trades['ERRORS']) & pd.isnull(trades['TV_TIC']):
        tv_tiv_errors.append("Initial validations passed still TV_TIC missing")
    if pd.isnull(trades['ERRORS']) & pd.notnull(trades['TV_TIC']) & len(trades['TV_TIC']) != 42:
        tv_tiv_errors.append("Initial validations passed and TV_TIC is also generated but length is != 42 chars")
    return tv_tiv_errors if len(tv_tiv_errors) > 0 else np.nan

trades['ERROR_TV_TIC'] = trades.apply(validate_tv_tic, axis=1)

我得到的错误是:('具有多个元素的数组的真值不明确。请使用a.any()或a.all()','在索引3处发生)

使用“和”的错误说明 错误截图2

使用“&”时的错误描述 错误截图2

我的直觉是说pd.isnull在某个地方引起问题,但不确定。

瓦伦·维什诺伊

代码没有问题。数据框内的数据存在问题。

列ERRORS是字符串列表,当> 1作为列值存在时抛出错误。因此,我在第3行和第4行中遇到了错误

ERRORS

['Length of Underlying Symbol for Option Contract is exceeding allowed limits(10 chars)']
['Future Option Indicator is missing']
['Trade Id is missing', 'Future Option Indicator is missing']
['Trade Id is missing', 'Future Option Indicator is missing']

找到根本原因后,我将列表更改为字符串,其中元素之间用非逗号分隔,这对我有用。

更改了我的函数validate_tv_tiv的返回语句

return tv_tiv_errors if len(tv_tiv_errors) > 0 else np.nan

return ' & '.join(errors) if len(errors) > 0 else np.nan

这创建了我的数据框列ERRORS,如下所示:

ERRORS

Length of Underlying Symbol for Option Contract is exceeding allowed limits(10 chars)
Future Option Indicator is missing
Trade Id is missing & Future Option Indicator is missing
Trade Id is missing & Future Option Indicator is missing

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将功能应用于基于列的数据框以及基于索引的其他数据框

数据框基于其他列创建新列

创建一个基于数据框中其他列的值创建新列的函数

Pandas数据框基于其他列值将功能应用于列字符串

使用rnorm函数从数据框中创建基于新列的其他列

如何基于列值创建其他行或数据框

使用mutate_at使用数据框中的其他多个列创建新列

根据其他列中的值应用功能

如何使用函数使用其他列值创建新的数据框列?

基于其他列条件和其他列计算的数据框新列值

熊猫数据框基于其他数据框的列创建一个新列

使用其他数据框中的匹配值在数据框中创建新列

遍历数据框列的多个操作(应用功能?)

如何基于Pandas数据框中其他多个列的值添加两个新列?

如何加快熊猫应用功能在数据框中创建新列?

如何创建新列,将值与其他数据框中的标头匹配

应用功能数据框列

熊猫根据其他列的值创建新列/逐行应用多列的功能

通过使用数据框中的其他多个列的值将新列添加到数据框中-Spark / Scala

基于遍历和比较其他数据框中的列来创建新的数据框

如何基于其他列的排列在数据框中创建新列?

基于来自另一个数据框的其他列创建新列

基于其他列的值创建新列的更好方法

使用多列的熊猫数据框滚动应用功能

基于主键从其他列中的数据创建新列

Python:基于其他列扩展数据框列值

如何在Pandas数据框中的其他列中填充基于新列的值

从Pandas数据框中的其他列创建新列

通过添加其他列中的值在Panda数据框中创建新列