[英]Subtracting multiple columns and appending results in pandas DataFrame
我有一张传感器数据表,其中一些列是测量值,而某些列是传感器偏差。 例如,如下所示:
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 xy 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 xy 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']
。 显然,我可以遍历各列并分别进行处理,但是有没有一种更紧凑的方法来完成我要执行的操作,这与单列解决方案更相似?
DataFrame通常对齐操作,例如对列和行索引进行算术运算。 由于df[['x','y']]
和df[['dx','dy']]
具有不同的列名,因此不会从x
列中减去dx
列,而对于y
列也是如此。
相反,如果从DataFrame中减去NumPy数组,则该操作将逐元素进行,因为NumPy数组没有要对齐的Panda样式索引。
因此,如果您使用df[['dx','dy']].values
提取由df[['dx','dy']]
中的值组成的NumPy数组,则可以根据需要完成分配:
import pandas as pd
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]})
df[['newx','newy']] = df[['x','y']] - df[['dx','dy']].values
print(df)
产量
dx dy x y newx newy
0 0.25 0.5 1.0 4.0 0.75 3.5
1 0.25 0.5 2.0 5.0 1.75 4.5
2 0.25 0.5 3.0 6.0 2.75 5.5
请注意,如果要尝试将NumPy数组(在右侧)分配给DataFrame(在左侧),则在左侧指定的列名称必须已经存在。
相反,当将右侧的DataFrame分配给左侧的DataFrame时,可以使用新列,因为在这种情况下, Pandas将左侧的键(新列名)与右侧的列一起压缩并分配值以列顺序而不是通过对齐列:
for k1, k2 in zip(key, value.columns):
self[k1] = value[k2]
因此,使用右侧的DataFrame
df[['newx','newy']] = df[['x','y']] - df[['dx','dy']].values
可以,但是在右侧使用NumPy数组
df[['newx','newy']] = df[['x','y']].values - df[['dx','dy']].values
才不是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.