如何基于与python中上一行的差异来移动列值?
我有一个dataframe,如下所示:如何基于与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
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
值会丢失一些数据,还会更改名称与宽度和高度之间的对应关系。这就是你想要的吗?是的,没错。因为宽度和高度的数据属于缺少的行序列。