2016-06-18 3 views
0

문제는 표에 누락 된 값을 채우는 것입니다.포스트 그레스에서 앞으로 또는 뒤로 채우기

$> 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에서 그렇게하고 할 수있는 방법이 있나요 : 아래 그림과 같이 pandas에서, 하나는 그렇게 작성 앞으로 (또는 뒤로) 사용할 수 있습니까? 나는 window functions 도움이 될 수 있지만 어떻게 알아낼 수 없었다고 생각합니다. 쿼리에 주문 매우 sencitive 때문에

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

곳 테이블은 ... 그것은 여러 빈 줄을 치다입니다 증명하기 위해 더 빈 x 라인을 추가? 누락 된 가치는 무엇입니까? –

+0

나는 그것을 편집했다, 나는 postgres에 재현하고 싶은 앞으로 채우는 fillna를 사용하는 pandas의 중요한 라인을 잊었다 –

+0

당신은 여기에서 기능이 필요할 것이다 - 만일 당신이 단지 'lag' 윈도우 기능이라면 - 당신은 이전 x, 너트를 얻을 것이다 이전에는 없습니다. 다른 말로하면, 이전 값이 아니라 이전에 정의 된 값 –

답변

1

window functions here

많은 별칭 : 같은 포스트 그레스에서

, 그것은 것입니다. 나는

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 
    ; 

enter image description here

관련 문제