Pandas 向现有df添加差异列

Pandas 向现有df添加差异列,pandas,difference,Pandas,Difference,我的目标是添加显示我以前列之间差异的列 df 结果: Name 0 1 2 d1 d2 A 3 1 0 2 (=3-1) 1 (=1-0) B 5 4 1 1 (=5-4) 3 (=4-1) 我在考虑创建一个新的df来计算差异,然后将其添加回原始df,但它不起作用,因为它仍然需要使用原始数据。有更好的方法吗 谢谢 difference = (df.shift(axis=1)-df).dropna(axis=1).add_prefix('d')

我的目标是添加显示我以前列之间差异的列

df

结果:

Name 0  1  2  d1        d2 
A    3  1  0  2 (=3-1)  1 (=1-0)
B    5  4  1  1 (=5-4)  3 (=4-1)
我在考虑创建一个新的df来计算差异,然后将其添加回原始df,但它不起作用,因为它仍然需要使用原始数据。有更好的方法吗

谢谢

difference = (df.shift(axis=1)-df).dropna(axis=1).add_prefix('d')
pd.concat([df,difference],axis=1)
  • .shift(),将索引下移,以便在减去行时,它们将按正确的顺序执行
  • 减去然后重新组合
  • .shift(),将索引下移,以便在减去行时,它们将按正确的顺序执行
  • 减去然后重新组合

    • 使用
      diff

      df = df.set_index('Name')
      df[['d1','d2']] = -df.diff(axis=1).iloc[:, 1:]
      


      使用
      diff

      df = df.set_index('Name')
      df[['d1','d2']] = -df.diff(axis=1).iloc[:, 1:]
      


      我们也可以先选择列名为的列。最后做减法

      df[['d1','d2']] = df[["0", "1"]] - df[["1", "2"]].values
      
          Name 0  1   2   d1  d2
          A   3   1   0   2   1
          B   5   4   1   1   3
      

      (我们需要
      .values
      来仅提取值并忽略其列名。您可以尝试在不使用
      .values
      的情况下删除它)

      我们也可以先使用列名选择列。最后做减法

      df[['d1','d2']] = df[["0", "1"]] - df[["1", "2"]].values
      
          Name 0  1   2   d1  d2
          A   3   1   0   2   1
          B   5   4   1   1   3
      

      (我们需要
      .values
      只提取值,忽略其列名。您可以尝试在不使用
      .values
      的情况下删除它)

      非常整洁!但我认为你遗漏了一两行代码。虽然我想我知道你做了什么ᴏʟᴅsᴘᴇᴇᴅ 是的,重新设置:-)非常整洁!但我认为你遗漏了一两行代码。虽然我想我知道你做了什么ᴏʟᴅsᴘᴇᴇᴅ 是的,重新设置:-)嘿。实际上,您可以水平移动。类似于
      df2.shift(1,axis=1)
      感谢您让我知道!我会在有时间的时候更新我的答案。@Tai我想这有帮助。嘿。实际上,您可以水平移动。类似于
      df2.shift(1,axis=1)
      感谢您让我知道!我会在有时间的时候更新我的答案。@Tai我认为这有帮助。