Pandas DataFrame编号基于数据集中的先前数字

时间:2018-02-27 17:48:40

标签: pandas numpy

我提前道歉,我不确定如何将空值添加到pandas数据帧中,所以我放置了“无”#39;在列表中。我有一个具有以下值的数据框:

None, None, 50,60,70,80,90,None,None, None, 110, None, None

import pandas as pd
number_list = [None, None, 50,60,70,80,90, None, 100, None, None, None, 110, None, None]
df = pd.DataFrame(number_list, columns=['ID'])

具有“无”的那些需要根据之前的数字分配一个数字。因此,如果空白值之前的数字是90,则空白数字将被分配91(前面的数字+1)。如果None位于行的开头,那么编号将从99901开始,依此类推。

 the final result for this example would be: 
 99901, 99902, 50,60,70,80,90,91,92,93,110,111,112

我尝试在t-sql中执行此操作,但每批需要3分钟。我有几千批...正确方向的任何一点都将非常感谢!!谢谢!!

1 个答案:

答案 0 :(得分:2)

IIUC

# getting the group key df.ID.isnull().astype(int).diff().ne(0).cumsum()  
s=df.groupby(df.ID.isnull().astype(int).diff().ne(0).cumsum()).cumcount().add(1)[df.ID.isnull()]
df.fillna((df.ffill().fillna(90000)).add(s,0))
Out[193]:
         ID
0   90001.0
1   90002.0
2      50.0
3      60.0
4      70.0
5      80.0
6      90.0
7      91.0
8     100.0
9     101.0
10    102.0
11    103.0
12    110.0
13    111.0
14    112.0