Pandas数据帧:创建一个新的列,该列是使用其他两列的自定义函数。
Pandas dataframe:创建一个使用其他两列的自定义函数的新列
在使用Pandas处理数据时,有时候我们需要根据已有的列创建一个新的列,而该新列的值是通过对其他两列进行自定义函数计算得到的。下面是一个关于如何创建这样一个新列的问题。
问题的背景是:如果你的函数只需要一个列的值,那么可以使用以下方法代替coldspeed的答案:
dfX['A'].apply(your_func)
如果需要将结果保存到新列中,可以使用以下方法:
dfX['C'] = dfX['A'].apply(your_func)
以上代码中,dfX是一个Pandas的DataFrame对象,'A'是DataFrame中的一个列名,your_func是一个自定义函数。
问题的原因是:在处理数据时,有时我们需要根据已有的列创建一个新的列,而新列的值是通过对其他两列进行自定义函数计算得到的。为了实现这个目标,我们需要使用Pandas的apply方法。
解决方法如下:
1. 首先,我们需要定义一个自定义函数,该函数可以接受两个参数,分别是两个列的值,并根据这两个值进行计算得到一个新的值。
2. 然后,我们可以使用apply方法将自定义函数应用于DataFrame中的每一行,从而得到一个包含新值的Series对象。
3. 最后,我们可以将这个Series对象赋值给DataFrame中的一个新列,从而创建一个新的列。
通过以上步骤,我们就可以实现创建一个新的列,该列的值是通过对其他两列进行自定义函数计算得到的。
在处理数据时,我们经常需要根据已有的列创建一个新的列,而新列的值是通过对其他两列进行自定义函数计算得到的。为了实现这个目标,我们可以使用Pandas的apply方法,将自定义函数应用于DataFrame中的每一行,从而得到一个包含新值的Series对象,并将该Series对象赋值给DataFrame中的一个新列,从而创建一个新的列。
问题的出现原因是使用Pandas dataframe创建一个新的列,该列是使用其他两列应用自定义函数的结果。解决方法是升级Pandas版本或使用向量化函数。
在给出的代码示例中,首先创建了一个包含两列数据的dataframe。然后定义了一个名为`someThingSpecial`的自定义函数,该函数将两个输入参数相加并返回结果。接下来,使用`apply`函数将该函数应用于dataframe的每一行,生成一个新的列。
如果希望升级Pandas版本,可以尝试将版本升级到最新的稳定版本(目前是0.21)。这可能会解决问题。
另一种解决方法是使用向量化函数。使用`np.vectorize`函数将自定义函数向量化,使其能够接受数组,并在每个元素对上操作。然后,可以通过将向量化函数应用于dataframe的两列数据,将结果赋值给新的列`C`。
作者还提到向量化函数的性能改进,但并不清楚它的具体实现原理。
最后,问题的提出者感谢解决方法的提供者,并表示原始方法也能够正常工作,问题实际上是在自定义函数上出现了错误。他表示喜欢向量化函数的优雅性。解决方法的提供者则表示不确定向量化函数具体是如何工作的,但它是他常用的工具之一。