python-3.x - 如果一列中的值在另一列中有多个值,如何在pandas中根据优先级进行过滤
问题描述
如果我有这样的数据框:
id descrip
0 0000 x
1 0000 y
2 0000 z
3 1111 x
4 1111 z
5 2222 z
6 3333 x
7 3333 y
而且我想基本上根据描述列的优先级保留行,如果有az,那么优先于ay,优先于x。
所以我基本上想要这个:
id descrip
0 0000 z
1 1111 z
2 2222 z
3 3333 y
不知道我会如何处理这个
解决方案
df.groupby('id')['descrip'].max().reset_index()
id descrip
0 0 z
1 1111 z
2 2222 z
3 3333 y
跟踪什么比什么更受欢迎总是好的。
假设顺序不同,即:y<z<x
x 是最喜欢的。然后我们可以这样做:
df['descrip'] = df.descrip.astype('category').cat.reorder_categories(['y', 'z', 'x']).\
cat.as_ordered()
df.groupby('id')['descrip'].max().reset_index()
id descrip
0 0 x
1 1111 x
2 2222 z
3 3333 x
推荐阅读
- php - PHP - Mysqli 每月考勤日历
- javascript - 为客户端逻辑运行 js 客户端
- stm32 - Nucleo 板上的 STM-Link 未枚举
- python - 使用 asyncio 和 contextvars 在 python 中的两个异步程序之间共享状态
- entity-framework-core - “Microsoft.EntityFrameworkCore.SqlServer.Infrastructure.Internal.SqlServerOptionsExtension”类型中的方法“get_Info”
- android - 处理程序示例由于某种原因无法正常工作
- python - 在 doctest 的文档字符串的行前添加“>>>”的任何快捷方式?
- node.js - 如何在 mongodb 中更新整个数组?
- uitableview - 从 StoryBoard 创建的 searchBar 不与 UISearchController 连接
- node.js - 不同的 Expressjs 路由方法调用执行相同的路由方法,仅在 DigitalOcean 液滴上