pandas 仅对panda Dataframe 中的特定行子集进行排序

y1aodyip  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(171)

我花了一些时间试图找出一个解决方案,但还没有能够找到一个简单明了的解决方案来解决我的问题。基本上我有以下 Dataframe :
| 平面零件|数量|是平面(_P)|
| - -|- -|- -|
| G6_32装配|一个|正确|
| G6_32试剂盒|2个|正确|
| 项目D| 2个|错误|
| 项目C|四个|错误|
| 物料A|五个|错误|
| G6_32部位|五个|正确|
| G6_32空间|六个|正确|
| 项目C| 2个|错误|
| 物料A|一个|错误|
| F项|2个|错误|
我只需要对包含is_plane == False的行的子集进行排序。所以最后我的最终结果看起来像这样:
| 平面零件|数量|是平面(_P)|
| - -|- -|- -|
| G6_32装配|一个|正确|
| G6_32试剂盒|2个|正确|
| 物料A|五个|错误|
| 项目C|四个|错误|
| 项目D| 2个|错误|
| G6_32部位|五个|正确|
| G6_32空间|六个|正确|
| 物料A|一个|错误|
| 项目C| 2个|错误|
| F项|2个|错误|
请注意,is_plane == True的行不应该被排序,并保持原来的位置。有什么想法如何实现它?

js4nwp54

js4nwp541#

制作石斑鱼进行分组

grouper = df['is_plane'].ne(df['is_plane'].shift(1)).cumsum()

grouper

0    1
1    1
2    2
3    2
4    2
5    3
6    3
7    4
8    4
9    4
Name: is_plane, dtype: int32

按组使用groupby
组'平面零件'全部为False,则按平面零件排序值

df.groupby(grouper).apply(lambda x: x.sort_values('Plane Parts') if x['is_plane'].sum() == 0 else x).droplevel(0)

输出:

Plane Parts Quantity    is_plane
0   G6_32 FAB   1           True
1   G6_32 KIT   2           True
4   Item A      5           False
3   Item C      4           False
2   Item D      2           False
5   G6_32 SITE  5           True
6   G6_32 SPACE 6           True
8   Item A      1           False
7   Item C      2           False
9   Item F      2           False

相关问题