如何在 Pandas 中填写递增整数

How to fill in an incrementing integer in Pandas

给定一个 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

我想通过在整数列上递增来 "fill in" 行。也就是说,我想获得:

     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 列转换为索引并使用它重新编制索引:

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(如果可以的话)。