我有一张传感器数据表,其中一些列是测量值,另一些列是传感器偏差。例如,像这样:
df=pd.DataFrame({'x':[1.0,2.0,3.0],'y':[4.0,5.0,6.0],
'dx':[0.25,0.25,0.25],'dy':[0.5,0.5,0.5]})
我可以通过从测量值中减去偏差来向表格中添加一列,方法如下:dx dy x y 0 0.25 0.5 1.0 4.0 1 0.25 0.5 2.0 5.0 2 0.25 0.5 3.0 6.0
df['newX'] = df['x'] - df['dx']
dx dy x y newX 0 0.25 0.5 1.0 4.0 0.75 1 0.25 0.5 2.0 5.0 1.75 2 0.25 0.5 3.0 6.0 2.75
但我希望一次性为多个列执行此操作。以下方法无效:
df[['newX','newY']] = df[['x','y']] - df[['dx','dy']]
似乎有两个原因。
- 当从数据框中减去另一个数据框时,列标签用于对齐减法运算,因此结果将包含4列
['x', 'y', 'dx', 'dy']
。 - 看起来可以使用索引将单个列插入到数据框中,但是不能插入多个列。
.values
对两个参数进行减法运算,但它抱怨说'newx'和'newy'不在索引中。我猜想这是因为如果我对两个都使用.values
,那么我正在分配一个numpy数组,但如果我只对第二个使用.values
,那么我正在分配一个DataFrame? - Omegaman_setitem_array
会跟随不同的代码路径。当它是一个NumPy数组时,它会在df.columns
中查找列newx
和newy
,找不到它们,因此引发KeyError
。因此,在左侧引用的列已经存在于df
中时,才能使用NumPy数组(在右侧)。 - unutbu