将函数应用于两列,并将输出映射到新列中。

44 浏览
0 Comments

将函数应用于两列,并将输出映射到新列中。

我对Pandas还不熟悉。想知道如何在数据框中将一个函数应用于两列,并将函数输出映射到数据框中的新列。是否可以使用Pandas语法来实现,还是应该使用原生的Python迭代数据框列中的行来生成新列?

问题是如何获得例如两个数字的乘积,并将结果放入新的列c中。

0
0 Comments

问题的原因是需要将两列的值同时传递给函数,并将函数的输出映射到新的一列中。

解决方法可以使用pandas库。首先定义一个函数funcMul,该函数接受一个参数row,并返回row['a']*row['b']的结果。然后通过df.apply(funcMul,1)将函数应用到数据框df的每一行,并将输出映射到新的一列df['c']中。

这样就实现了将两列的值传递给函数,并将函数的输出映射到新的一列的功能。最后的输出结果为包含原始数据列a、b以及新的一列c的数据框。

0
0 Comments

问题的出现原因是,需要将两列的值应用某个函数,并将输出映射到一个新的列中。在给出的示例中,需要将列 'a' 和列 'b' 的值相乘,并根据乘积的大小返回乘积的平方或立方。

解决方法是使用Pandas的apply函数和map函数。首先,定义一个用于apply函数的函数functionUsedInApply,该函数接收一个包含DataFrame中一行数据的Pandas Series对象,并将两列的值相乘。然后,定义一个用于map函数的函数functionUsedInMap,该函数接收functionUsedInApply返回的值,并根据值的大小返回平方或立方。最后,使用apply函数将functionUsedInApply应用于DataFrame的每一行,并使用map函数将functionUsedInMap应用于apply函数的输出。将map函数的输出赋值给新的列 'new_column_name'。

以下是完整的解决方案代码:

def functionUsedInApply(row):
    """ The function logic for the apply function comes here. 
    row: A Pandas Series containing the a row in df.
    """
    return row['a'] * row['b']
def functionUsedInMap(value):
    """ This function is used in the map after the apply.
    For this example, if the value is larger than 5, 
    return the cube, otherwise, return the square.     
    value: a value of whatever type is returned by functionUsedInApply.
    """
    if value > 5:
        return value**3
    else:
        return value**2
df['new_column_name'] = df.apply(functionUsedInApply,axis=1).map(functionUsedInMap)

上述代码首先将列 'a' 和列 'b' 的值相乘,然后根据乘积的大小返回乘积的平方或立方。最终,将map函数的输出赋值给新的列 'new_column_name'。

通过使用apply函数和map函数,可以实现将两列的值应用某个函数,并将输出映射到一个新的列中的目标。

0
0 Comments

问题的原因是在给定的代码中,使用了apply函数将func应用于两列数据,然后将输出映射到新的列c。然而,使用apply函数和lambda表达式的组合被认为是一个不好的实践。

解决这个问题的更好方法是直接使用df['c'] = df['a'] * df['b'],这样可以直接将两列相乘的结果赋值给新的列c。

pandas的官方文档提供了apply函数的详细说明和用法。可以在https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html上找到相关信息。

,通过使用直接的乘法操作,可以更简洁地实现将两列数据相乘并映射到新列的功能,而不需要使用apply函数和lambda表达式。这样能够提高代码的可读性和性能。

0