Pandas数据帧:创建一个新的列,该列是使用其他两列的自定义函数。

42 浏览
0 Comments

Pandas数据帧:创建一个新的列,该列是使用其他两列的自定义函数。

考虑以下存储在pandas DataFrame dfX中的数据集:

A   B
1   2
4   6
7   9

我有一个函数:

def someThingSpecial(x,y)
  # z = 对x和y进行特殊处理
  return z

现在我想在dfX中创建一个新的列,该列包含计算得到的z值。

参考其他SO示例,我尝试了几种变体,包括:

dfX['C'] = dfX.apply(lambda x: someThingSpecial(x=x['A'], y=x['B']), axis=1)

但是会返回错误。请问正确的做法是什么?

0
0 Comments

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中的一个新列,从而创建一个新的列。

0
0 Comments

问题的出现原因是使用Pandas dataframe创建一个新的列,该列是使用其他两列应用自定义函数的结果。解决方法是升级Pandas版本或使用向量化函数。

在给出的代码示例中,首先创建了一个包含两列数据的dataframe。然后定义了一个名为`someThingSpecial`的自定义函数,该函数将两个输入参数相加并返回结果。接下来,使用`apply`函数将该函数应用于dataframe的每一行,生成一个新的列。

如果希望升级Pandas版本,可以尝试将版本升级到最新的稳定版本(目前是0.21)。这可能会解决问题。

另一种解决方法是使用向量化函数。使用`np.vectorize`函数将自定义函数向量化,使其能够接受数组,并在每个元素对上操作。然后,可以通过将向量化函数应用于dataframe的两列数据,将结果赋值给新的列`C`。

作者还提到向量化函数的性能改进,但并不清楚它的具体实现原理。

最后,问题的提出者感谢解决方法的提供者,并表示原始方法也能够正常工作,问题实际上是在自定义函数上出现了错误。他表示喜欢向量化函数的优雅性。解决方法的提供者则表示不确定向量化函数具体是如何工作的,但它是他常用的工具之一。

0