[英]Subset of a Pandas Dataframe consisting of rows with specific column values
[英]Sorting only specific subset of rows in pandas dataframe
我花了一些时间试图找出一个解决方案,但未能找到一个简单干净的解决方案来解决我的问题。 基本上我有以下 dataframe:
平面零件 | 数量 | is_plane |
---|---|---|
G6_32工厂 | 1个 | 真的 |
G6_32套件 | 2个 | 真的 |
D项 | 2个 | 错误的 |
项目 C | 4个 | 错误的 |
项目A | 5个 | 错误的 |
G6_32 站点 | 5个 | 真的 |
G6_32 空间 | 6个 | 真的 |
项目 C | 2个 | 错误的 |
项目A | 1个 | 错误的 |
F项 | 2个 | 错误的 |
我只需要对具有is_plane == False
的行子集进行排序。 所以最后我的最终结果是这样的:
平面零件 | 数量 | is_plane |
---|---|---|
G6_32工厂 | 1个 | 真的 |
G6_32套件 | 2个 | 真的 |
项目A | 5个 | 错误的 |
项目 C | 4个 | 错误的 |
D项 | 2个 | 错误的 |
G6_32 站点 | 5个 | 真的 |
G6_32 空间 | 6个 | 真的 |
项目A | 1个 | 错误的 |
项目 C | 2个 | 错误的 |
F项 | 2个 | 错误的 |
请注意, is_plane == True
的行不应排序并保留原始 position。关于如何实现它的任何想法?
为分组制作石斑鱼
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
按石斑鱼分组
将其“Plane Parts”全部为 False,按 Plane Parts 排序值。
df.groupby(grouper).apply(lambda x: x.sort_values('Plane Parts') if x['is_plane'].sum() == 0 else x).droplevel(0)
output:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.