在 Pandas 数据框中,在两列之间填充数字

4

我有一个Pandas数据框,其列如下:

id  start  end
1   101    101
2   102    104
3   108    109

我希望您可以在起始和结束之间填充额外的行,这样输出可能会像这样:
id  number
1    101
2    102
2    103
2    104
3    108
3    109

有没有办法在Pandas中实现这个功能?谢谢。
2个回答

6

使用嵌套的列表推导式、range和展平技巧处理元组列表,最后使用DataFrame构造函数:

zipped = zip(df['id'], df['start'], df['end'])

df = pd.DataFrame([(i, y) for i, s, e in zipped for y in range(s, e+1)],
                   columns=['id','number'])
print (df)
   id  number
0   1     101
1   2     102
2   2     103
3   2     104
4   3     108
5   3     109

1

这里是一个纯粹的pandas解决方案,但就性能而言,@jaezrael的解决方案会更好。

df.set_index('id').apply(lambda x: pd.Series(np.arange(x.start, x.end + 1)), axis = 1)\
.stack().astype(int).reset_index()\
.drop('level_1', 1)\
.rename(columns = {0:'Number'})

    id  Number
0   1   101
1   2   102
2   2   103
3   2   104
4   3   108
5   3   109

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