首页 > 解决方案 > python - 如何根据与python pandas中前一行的差异来移动列值?

问题描述

我有如下所示的数据框:

      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

所以就像看到的那样,名字不是按顺序排列的。中间缺少文件。如果名称按顺序排列,我想将宽度和高度的列值移到下一行。如果不是,我想将行的宽度和高度填充为 NaN。

我尝试了以下代码:

diff=data['Name'].diff()

并尝试使用此值差异进行 group_by 。但它没有用。

我期待如下结果:

       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

标签: pythonpandasdataframe

解决方案


为组创建助手系列 by Series.diff,比较 bySeries.ne并将Series.cumsum其传递给DataFrameGroupBy.shift

diff = data['Name'].diff().ne(1).cumsum()
data[['width','height']] = data.groupby(diff)['width','height'].shift()
print (data)
   Name  width  height  breadth
0     1    NaN     NaN        2
1     2   13.0    90.0        1
2     3  101.0    45.0        1
3     5    NaN     NaN        1
4     6   11.0    34.0        2

推荐阅读