问题是填充表中的缺失值。在pandas中,可以使用向前(或向后)填充来执行此操作,如下所示:
$> import pandas as pd
$> df = pd.DataFrame({'x': [None, 1, None, None, 2, None, 3, None]})
$> df['y'] = df['x'].fillna(method='ffill')
$> df
x y
0 NaN NaN
1 1 1
2 NaN 1
3 NaN 1
4 2 2
5 NaN 2
6 3 3
7 NaN 3
有没有办法在SQL中更准确地在PostGres中执行此操作?我想window functions可能有所帮助,但我无法弄清楚如何。
在PostGres中,它会像:
sandbox=# SELECT x, ??
FROM
(SELECT NULL AS x
UNION ALL SELECT 1 AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT 2 AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT 3 AS x
UNION ALL SELECT NULL AS x) a;
x
---
1
2
3
(8 rows)
答案 0 :(得分:4)
这么多别名,因为您的查询对订单非常敏感。
我添加了更多空的x
行来证明它是修剪了几个空行...
select x,y from (
select r,x, case when y is not null then y else min(y) over (partition by x order by r) end y from (
SELECT row_number() over() r,x, case when x is not null then x else lag(x) over () end y
FROM
(SELECT NULL AS x
UNION ALL SELECT 1 AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT 2 AS x
UNION ALL SELECT NULL AS x
UNION ALL SELECT 3 AS x
UNION ALL SELECT NULL AS x
) a
) b
order by r
) c
;