Pandas 基于数据集中以前的数字的数据帧编号
我事先表示歉意,我不知道如何将空值添加到pandas数据帧中,因此我在列表中放置了“无”。我有一个具有以下值的数据帧:Pandas 基于数据集中以前的数字的数据帧编号,pandas,numpy,Pandas,Numpy,我事先表示歉意,我不知道如何将空值添加到pandas数据帧中,因此我在列表中放置了“无”。我有一个具有以下值的数据帧: 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(nu
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'])
有None的需要根据前面的编号分配编号。因此,如果空白值前的数字为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分钟以上。我有几千批。。。只要方向正确,我们将不胜感激!!谢谢 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
非常感谢你!这正如预期的那样奏效。你介意解释一下它是如何工作的吗?@yanci首先,我们填充并填充na()以实现第一步,然后,第二步,我们通过将df拆分为2部分isnull和notnull来处理增量,然后我们计算连续的行数如果我想按10而不是1添加,我会改为.add(10)吗?我改变了第一行,它工作得很好,但是没有进程号的第一个数字仍然是按one@yanci应该是这样。穆(10)再次感谢。我还有一个问题要问你。那些没有进程号的,我需要从990开始,然后反向工作。所以不是90002和90001,而是980990。这个数字不可能超过1000,这就是为什么它从990开始,然后从那里倒退。因此,如果一开始我有5个空插槽,它将是95096097090990。这仅适用于没有程序编号的第一批记录。再次感谢你的帮助!