2017-06-15 8 views
1

を埋めるために行を作成します。パンダ:このようなデータフレームから数値のギャップ

ref    from to 
abcd   1  2 
efgh   2  4 
ijkl   1  3 
mnop   3  4 
qrst   4  4 
uvwx   4  6 

アイデアが得られるように、列fromto間の「ギャップを埋める」ために、次のようになります。

ref    value 
abcd   1 
abcd   2 
efgh   2 
efgh   3 
efgh   4 
ijkl   1 
ijkl   2 
ijkl   3 
mnop   3 
mnop   4 
qrst   4 
uvwx   4 
uvwx   5 
uvwx   6 

答えて

1

numpyアプローチ

r = df['ref'].values 
f = df['from'].values 
t = df['to'].values 
pd.DataFrame(dict(
     ref=r.repeat(t - f + 1), 
     value=np.concatenate([np.arange(f, t + 1) for f, t in zip(f, t)]) 
    )) 

    ref value 
0 abcd  1 
1 abcd  2 
2 efgh  2 
3 efgh  3 
4 efgh  4 
5 ijkl  1 
6 ijkl  2 
7 ijkl  3 
8 mnop  3 
9 mnop  4 
10 qrst  4 
11 uvwx  4 
12 uvwx  5 
13 uvwx  6 

タイミング

1

最初にgroupby refを使用して、ギャップを埋めるためにSeriesを作成し、それをDataframeに変換して最後の列の名前を変更することができます。

df.groupby('ref').apply(lambda x: pd.Series(range(x['from'],x['to']+1)))\ 
       .reset_index(level=1,drop=True)\ 
       .reset_index()\ 
       .rename(columns={0:'value'}) 
Out[22]: 
    ref value 
0 abcd  1 
1 abcd  2 
2 efgh  2 
3 efgh  3 
4 efgh  4 
5 ijkl  1 
6 ijkl  2 
7 ijkl  3 
8 mnop  3 
9 mnop  4 
10 qrst  4 
11 uvwx  4 
12 uvwx  5 
13 uvwx  6 
関連する問題