繁体   English   中英

减去多列并将结果附加到pandas DataFrame中

[英]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']]

看来有两个原因。

  • 当减去DataFrames时,列标签用于对齐减法,因此最后得到4列结果['x', 'y', 'dx', 'dy']
  • 看来我可以使用索引将单个列插入DataFrame中,但不能超过一个。

显然,我可以遍历各列并分别进行处理,但是有没有一种更紧凑的方法来完成我要执行的操作,这与单列解决方案更相似?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM