如何基于与python中上一行的差异来移动列值?

如何基于与python中上一行的差异来移动列值?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个dataframe,如下所示: Name width height breadth 0 1 13 90 2 1 2 101 45 1 2 3 78 6 1 3 5 11 34 1 4

我有一个dataframe,如下所示:

      Name       width        height   breadth      
0       1         13          90       2    
1       2         101         45       1
2       3         78          6        1      
3       5         11          34       1
4       6         23          8        2

       Name       width        height   breadth      
0       1         NaN         Nan       2   
1       2         13          90        1
2       3         101         45        1      
3       5         Nan         Nan       1
4       6         11          34        2
正如我们所看到的,名称不按顺序排列。中间有丢失的文件。 如果名称按顺序排列,我想将宽度和高度的列值移到下面一行。如果不是,我想将行的宽度和高度填充为NaN

我尝试了以下代码:

diff=data['Name'].diff()
并试图通过使用这个差值来进行分组。但它没有起作用

我期望得到如下结果:

      Name       width        height   breadth      
0       1         13          90       2    
1       2         101         45       1
2       3         78          6        1      
3       5         11          34       1
4       6         23          8        2

       Name       width        height   breadth      
0       1         NaN         Nan       2   
1       2         13          90        1
2       3         101         45        1      
3       5         Nan         Nan       1
4       6         11          34        2

您可以使用临时数据框添加空行并移动值:

temp = pd.DataFrame({'Name': np.arange(
    data.Name.min(), data.Name.max() + 1)}).merge(data, on='Name', how='left')

temp.iloc(axis=1)[1:] = temp.iloc(axis=1)[1:].shift()

result = pd.DataFrame(data.Name).merge(temp , on='Name')

为分组依据、比较依据和创建助手系列,并将其传递给:


这样添加
Nan
值会丢失一些数据,还会更改名称与宽度和高度之间的对应关系。这就是你想要的吗?是的,没错。因为宽度和高度的数据属于缺少的行序列。