python - 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
解决方案
为组创建助手系列 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
推荐阅读
- python - 我的图形图例颜色与我的图形线颜色不匹配?
- .net - 在调用具有基本类型参数的 .NET Core Web API 控制器时,无法将派生类作为参数从角度代码发布
- wpf - 让用户在窗口外抓取窗口以调整大小
- java - java.time.format.DateTimeParseException:尝试解析时区日期时间时
- kubernetes - 如何让 Google Cloud Composer (airflow) 在不同的 kubernetes 集群上运行作业?
- python - 哪个R包提供了类似于pythons urllib的功能
- java - Java中不同程序的并发读写
- java - 回调问题:无法从结果类型为 void 的方法返回值
- bigbluebutton - 具有最大参与者和最大房间的自定义用户角色
- flutter - PlatformException(PlatformException(ERROR_GEOCODING_COORDINATES,服务不可用,null))