我提前道歉,我不确定如何将空值添加到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分钟。我有几千批...正确方向的任何一点都将非常感谢!!谢谢!!
答案 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