根据先前的值在数据框中创建下一行

Create next rows in dataframe based on values from previous

我的 df 如下所示

   id    number 
   123      1   
   256      2  
   879      3   
   132      4  
   3215     5   
   216      6  

输出应该是这样的:

   id    number 
   123      1   
   256      2  
   879      3   
   132      4  
   3215     5   
   216      6  
   NaN      7
   NaN      8
   NaN      9
   NaN      10

所以基本上我需要在列号和列 id 的前一行中添加 1,不应该有任何值。我需要 30 个新行。我试过这个:

n = 30  
for i in range(n):
       df = df.append(df.tail(1).add(1))

但结果不正确。你有什么想法?感谢帮助。 问候 托马斯

试试 set_indexreindex:

>>> df.set_index('number').reindex(range(11)).reset_index()
    number      id
0        0     NaN
1        1   123.0
2        2   256.0
3        3   879.0
4        4   132.0
5        5  3215.0
6        6   216.0
7        7     NaN
8        8     NaN
9        9     NaN
10      10     NaN
>>> 

您可以 set_indexreindexreset_index:

df.set_index('number').reindex(range(1, 11)).reset_index()

输出:

   number      id
0       1   123.0
1       2   256.0
2       3   879.0
3       4   132.0
4       5  3215.0
5       6   216.0
6       7     NaN
7       8     NaN
8       9     NaN
9      10     NaN

如果要保持列顺序:

cols = df.columns
df.set_index('number').reindex(range(1, 11)).reset_index()[cols]
       id  number
0   123.0       1
1   256.0       2
2   879.0       3
3   132.0       4
4  3215.0       5
5   216.0       6
6     NaN       7
7     NaN       8
8     NaN       9
9     NaN      10

A merge 是另一个有效的选项,并保持列顺序:

df.merge(pd.Series(range(1,11), name = 'number'),how = 'right')
 
       id  number
0   123.0       1
1   256.0       2
2   879.0       3
3   132.0       4
4  3215.0       5
5   216.0       6
6     NaN       7
7     NaN       8
8     NaN       9
9     NaN      10