给出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
操作中使用它,我正在寻找最有效的代码来执行此操作。
答案 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,如果你可以将它拉下来。