如何在 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(如果可以的话)。
给定一个 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(如果可以的话)。