python - 聚合具有相同id号的行并基于聚合输入列值
问题描述
df = pandas.DataFrame( {
"ID" : ["1123", "2325", "9788", "1123", "9788" , "5421"] ,
"Type" : ["Red", "Black", "Black", "Black", "Red", "Black"] } )
df 应如下所示 - 请注意 ID 号 1123 和 9788 具有黑色和红色“类型”
ID Type
0 1123 Red
1 2323 Black
2 9788 Black
3 1123 Black
4 9788 Red
5 5421 Black
我想编写一些聚合行的代码。如果 ID 号同时具有黑色和红色“类型”,我希望它显示为红色,否则为黑色,如下所示。
ID Type
0 1123 Red
1 2323 Black
2 9788 Red
3 5421 Black
解决方案
公正groupby
取值max
(因为“红”>“黑”):
df.groupby('ID', as_index=False)['Type'].max()
输出:
ID Type
0 1123 Red
1 2325 Black
2 5421 Black
3 9788 Red
更新:如果您有更多类型,您可以转换为有序分类,指定所需的顺序,然后以完全相同的方式使用groupby
和:max
df['Type'] = pd.Categorical(df['Type'],
categories=['Black', 'Green', 'Blue', 'Red'],
ordered=True)
df.groupby('ID', as_index=False)['Type'].max()
在这里,我们将有“黑色”<“绿色”<“蓝色”<“红色”
推荐阅读
- django - 当我有“卷”时,Docker Compose 不起作用,否则它会起作用。为什么?
- mysql - 连接到 vps 上的 mysql 服务器
- r - 计算 R 中 DNA 多序列比对的熵
- java - 如何将 JSON 文档反序列化为 Jackson 中的预处理 bean?
- apache-ranger - Kafka Ranger SSL 集成问题
- openssl - 将 DER 格式的证书和密钥合并到一个文件中
- javascript - 合并或组合两个 onEdit 触发器函数
- javascript - Angular 9:如何根据下拉值动态添加行
- windows - localStack 在 Windows 10 上的 docker 中启动,但无法通过 localhost 连接
- sql-server - SELECT TOP 10 的每组某个字段的数据跨 2 个表