如何填写Pandas中的递增整数

时间:2017-11-14 00:05:19

标签: python-3.x pandas dataframe nan fillna

给出pd.DataFrame,例如:

print(pd.DataFrame([['a', 0, 'b'], ['c', 1, 'd'], ['f', 4, 'e']]))
   0  1  2
0  a  0  b
1  c  1  d
2  f  4  e

我想"填写"通过递增整数列的行。也就是说,我想获得:

     0  1    2
0    a  0    b
1    c  1    d
2  NaN  2  NaN
3  NaN  3  NaN
4    f  4    e

正如我将在大型数据集中的groupby操作中使用它,我正在寻找最有效的代码来执行此操作。

1 个答案:

答案 0 :(得分:2)

您可以将1列转换为索引并使用它重新索引:

In [33]: df.set_index(1).reindex(range(df[1].iloc[0], df[1].iloc[-1]+1)).reset_index()
Out[33]: 
   1    0    2
0  0    a    b
1  1    c    d
2  2  NaN  NaN
3  3  NaN  NaN
4  4    f    e

如果你关心的话,你可以重新排序。

不了解性能,但坦率地说,自定义groupby操作起步非常慢。如果速度非常关键,那么最好的办法是将这个递增操作完全移出groupby,如果你可以将它拉下来。