我有一个传感器数据表,其中有些列是测量值,有些列是传感器偏差。例如,类似这样的:
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']]
似乎有两个原因。
['x', 'y', 'dx', 'dy']
。很明显,我可以遍历列并分别执行每个列,但是有没有一种更紧凑的方法来完成我试图执行的任务,这种方法更类似于单列解决方案?
数据帧通常对齐列和行索引上的算术运算。由于
df[['x','y']]
和df[['dx','dy']]
具有不同的列名,因此dx
列不会从x
列中减去,而类似于y
列。相反,如果从数据帧中减去NumPy数组,则该操作是按元素执行的,因为NumPy数组没有Panda样式的索引可供对齐。
因此,如果使用
df[['dx','dy']].values
提取由df[['dx','dy']]
中的值组成的NumPy数组,则可以根据需要完成赋值:收益率
注意,如果你试图分配一个NumPy数组(在右边) 对于数据帧(在左侧),左侧指定的列名必须已存在。
相反,在将右侧的数据帧分配给左侧的数据帧时,可以使用新列,因为in this casePandas将左侧的键(新列名)与右侧的列一起拉入,并按列顺序分配值,而不是通过对齐列:
因此,使用右边的数据帧
可以,但是使用右边的NumPy数组
没有。
相关问题 更多 >
编程相关推荐