python - 在 Pandas 中,如何减少行数以便只接受某个子组最大值的行?
问题描述
a 1
a 2
a 3
b 3
b 4
a 3
b 5
b 6
b 4
b 10
b 11
a 10
b 2
b 3
忽略 a 直到 b 发生变化。只考虑 a 更改为 b 的组,并获得该组的最大值?
最终输出
a 1
a 2
a 3
b 4
b 11
a 10
即 b 是第一组的最大值 b 是第二组的最大值 a 是第三组的最大值
解决方案
使用shift
and cumsum
witheq
创建组键,然后使用groupby
sort_values
+tail
m=(df.C1.shift().ne(df.C1)&df.C1.eq('a')).cumsum()
df.sort_values('C2').groupby(m).tail(1)
Out[62]:
C1 C2
4 b 4
11 a 10
10 b 11
然后我们结合第一组所有 C1 值都是 'a' 使用concat
s1=df.sort_values('C2').groupby(m).tail(1)
s2=df.loc[(df.C1=='a')&(m==1)]
pd.concat([s1,s2]).sort_index()
Out[71]:
C1 C2
0 a 1
1 a 2
2 a 3
4 b 4
10 b 11
11 a 10
推荐阅读
- sql - 插入带有内连接语句的子查询的语句
- amazon-web-services - 在 AWS VPC 中为公共主机名强制 DNS 重定向
- memory - 内存分配和初始化是否在编译时和运行时分开进行?
- java - 性能:多个 Web 方法或多个 Web 服务
- php - 在 PHP 中使用准备语句截断表
- javascript - 从 Pinterest Javascript SDK 收到的访问令牌的到期时间是什么?
- flutter - 在 Flutter 中处理 Stateful 小部件后,const 实例会保留在内存中吗?
- architecture - 如何评估 OBIEE 12c 的数据库大小要求
- javascript - Phantomjs 无法通过 aspx 从 HTML 网站获取刷新的内容
- cassandra-3.0 - Cassandra Batch 跨多个数据中心失败