使用pandas有条件地移动列中的数据

zf2sa74q  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(161)

假设我有一个这样的df

  1. index shift value
  2. 0 1 A
  3. 1 0 nan
  4. 2 0 A
  5. 3 1 A
  6. 4 0 nan
  7. 5 0 nan
  8. 6 0 A
  9. 7 0 nan

字符串
在代码之后,期望的输出如下:只有值在移位时具有1向下移动一行

  1. index shift value
  2. 0 1 nan
  3. 1 0 A
  4. 2 0 A
  5. 3 1 nan
  6. 4 0 A
  7. 5 0 nan
  8. 6 0 A
  9. 7 0 nan


shift列中的1只会出现在value列中有nonna值的地方。我想使用shift(),但它会向下移动整个列的值,这不是我想要的。

ubof19bj

ubof19bj1#

试试这个:

  1. df['value'] = df.loc[np.arange(len(df)) - df['shift'].shift().fillna(0),'value'].to_numpy()
  2. df['value'] = df['value'].where(df['shift'].eq(0))

字符串
或者是

  1. df['value'].fillna((v:=df.loc[df['shift'].ne(0)]).set_axis(v.index + v['shift'])['value']).where(df['shift'].eq(0))

相关问题