Sobes.tech
Junior

Come fare un'estensione verso l'alto (riempire NULL con il valore non nullo precedente in direzione inversa)?

sobes.tech AI

Risposta dell'AI

Чтобы сделать протяжку вверх (заполнить NULL предыдущим ненулевым значением в обратном направлении), можно использовать функции заполнения в pandas:

import pandas as pd

df = pd.DataFrame({'value': [None, None, 3, None, 5, None, None]})

# Заполнение NULL значением, идущим сверху вниз (forward fill)
df['filled_down'] = df['value'].ffill()

# Заполнение NULL значением, идущим снизу вверх (backward fill)
df['filled_up'] = df['value'].bfill()

print(df)

В SQL для этого часто используют оконные функции с LAST_VALUE или IGNORE NULLS, но поддержка зависит от СУБД. В PostgreSQL можно сделать так:

SELECT
  value,
  LAST_VALUE(value) OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS filled_down,
  FIRST_VALUE(value) OVER (ORDER BY id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS filled_up
FROM table

Где filled_up — это протяжка вверх (заполнение NULL предыдущим ненулевым значением в обратном направлении).