Pandas:创建行以填充数值间隔

3

从像这样的DataFrame开始:

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
2个回答

3
一种使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接