我有一个数据框,其中有两列相同大小的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>
。
答案 0 :(得分:2)
如果您想将ndarray
更改为list
,请执行list(df['dV'])
当数组具有不同的大小时,通常会发生广播错误。你确定他们的形状是平等的吗?您可以使用.shape
获取该信息。您可以阅读有关广播here的更多信息。
对我的lambda应用numpy的tolist为数据帧中的每个值输出
<built-in method tolist of numpy.ndarray object>
。
那是因为你做了:someArray.tolist
,而不是someArray.tolist()
,所以你实际上是打印功能,而不是调用它然后打印它的结果。