numpy 在两个特定的唯一值之间填充值

xesrikrc  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(124)

我有一个以下的框架:
| 指数|值|
| --|--|
| 1 |没有一|
| 2 |一|
| 3 |没有一|
| 4 |一|
| 5 |B|
| 6 |B|
| 7 |没有一|
| 8 |一|
| 9 |一|
| 10 |B|
我们的想法是在A和B之间填充None,这样列中就没有连续的A或B。
期望输出
| 指数|值|
| --|--|
| 1 |没有一|
| 2 |一|
| 3 |没有一|
| 4 |没有一|
| 5 |B|
| 6 |没有一|
| 7 |没有一|
| 8 |一|
| 9 |没有一|
| 10 |B|
这可以很容易地通过循环来完成,但由于我使用的是pandas和numpy,我希望避免使用循环方法。

d6kp6zgx

d6kp6zgx1#

你可以ffill来向前传播非None,然后shift,只保留与布尔索引的新系列不相同的值:

  1. df.loc[df['Value'].eq(df['Value'].ffill().shift()), 'Value'] = None

字符串
mask

  1. df['Value'] = df['Value'].mask(df['Value'].eq(df['Value'].ffill().shift()), None)


输出量:

  1. index Value
  2. 0 1 None
  3. 1 2 A
  4. 2 3 None
  5. 3 4 None
  6. 4 5 B
  7. 5 6 None
  8. 6 7 None
  9. 7 8 A
  10. 8 9 None
  11. 9 10 B


中间体:

  1. index Value ffill shift eq
  2. 0 1 None None None True
  3. 1 2 A A None False
  4. 2 3 None A A False
  5. 3 4 A A A True
  6. 4 5 B B A False
  7. 5 6 B B B True
  8. 6 7 None B B False
  9. 7 8 A A B False
  10. 8 9 A A A True
  11. 9 10 B B A False

展开查看全部

相关问题