在pandas中减去两列列表

时间:2017-04-06 00:05:10

标签: pandas numpy

我有一个数据框,其中有两列相同大小的1D列表,我想形成第三列,其中包含这些向量的差异。从概念上讲:

df['dV'] = df['v1'] - df['v2']

如果df['v1']看起来如此:

0  [0.2, 0.1, 0.0]
1  [0.5, -0.4, 0.0]
...

df['v2']看起来像:

0  [0.1, 0.6, 0.0]
1  [0.5, 0.4, 0.0]
...

然后所需的结果df['dV']将是:

0  [0.1, -0.5, 0.0]
1  [0.0, -0.8, 0.0]
...

我尝试了以下内容:

df['dV'] = df['v1'] - df['v2']

导致"操作数无法广播。"错误。接下来,我试过了:

vecsub = lambda x, y: np.subtract(x, y)
df['dV'] = list(map(vecsub, df['v1'], df['v2']))

这会产生一个结果,但类型不同:

type(df['dV'])

numpy.ndarray

,而

type(df['v1'])

list

我怎样才能简单地将dV中的结果作为列表?对于数据框中的每个值,在我的lambda周围应用numpy的tolist输出<built-in method tolist of numpy.ndarray object>

1 个答案:

答案 0 :(得分:2)

如果您想将ndarray更改为list,请执行list(df['dV']) 当数组具有不同的大小时,通常会发生广播错误。你确定他们的形状是平等的吗?您可以使用.shape获取该信息。您可以阅读有关广播here的更多信息。

  

对我的lambda应用numpy的tolist为数据帧中的每个值输出<built-in method tolist of numpy.ndarray object>

那是因为你做了:someArray.tolist,而不是someArray.tolist(),所以你实际上是打印功能,而不是调用它然后打印它的结果。