2016-06-18 10 views
0

テーブルに欠損値を入力するのが問題です。 pandasで、1が前方使用(または後方)することができ、以下のようにそうするように充填:ポストグルの前方(または後方への充填)

$> 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ので

、それは次のようになります:あなたのクエリが順番に非常に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を使用するパンダの1つの重要なラインを忘れた –

+0

ここで機能が必要になります - あなたはちょうど 'ラグ'ウィンドウ機能 - 前の隣ではありません。言い換えれば、ある種のRECURSIVE LAGがここにあります。以前の値ではなく、以前に定義された値を繰り返すことです。 –

答えて

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