从像这样的DataFrame:
ref from to
abcd 1 2
efgh 2 4
ijkl 1 3
mnop 3 4
qrst 4 4
uvwx 4 6
想法是填补空白"列from
和to
之间以获取:
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
答案 0 :(得分: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
答案 1 :(得分: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
计时