gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:54:18 30 4
gpt4 key购买 nike

我有一个传感器数据表,其中一些列是测量值,一些列是传感器偏差。例如,像这样:

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

看来有两个原因。

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

显然我可以遍历列并单独执行每个列,但是是否有更紧凑的方法来完成我正在尝试做的事情,它更类似于单列解决方案?

最佳答案

DataFrame 通常在列和行索引上对齐算术等操作。由于 df[['x','y']]df[['dx','dy']] 具有不同的列名,因此 dx 列不会从 x 列中减去,对于 y 列也是如此。

相比之下,如果您从 DataFrame 中减去 NumPy 数组,则操作是按元素完成的,因为 NumPy 数组没有要对齐的 Panda 样式索引。

因此,如果您使用 df[['dx','dy']].values 提取由 df[['dx',' 中的值组成的 NumPy 数组dy']],那么你的作业就可以按需完成了:

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 时,可以使用新列,因为 in this case 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

没有。

关于python - 减去多列并将结果附加到 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38419286/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com