如何按多列排序DataFrame并剔除不符合排序规则的行
解决方法
可以用Pandas的排序和累积最小值函数快速实现需求,步骤如下:
- 按列A升序排序:先把DataFrame按照A列从小到大排列,确保A列的顺序符合要求。
- 筛选B列的单调递减行:通过计算B列的累积最小值(
cummin()),只保留B值等于对应累积最小值的行——因为累积最小值会记录到当前行为止的最小B值,若某行的B值大于累积最小值,说明它破坏了B列的递减趋势,需要剔除。
完整代码示例
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'A': [1, 4, 2, 6], 'B': [8, 9, 5, 2] }) # 按A升序排序 df_sorted = df.sort_values('A').reset_index(drop=True) # 筛选符合B列降序规则的行 result = df_sorted[df_sorted['B'] == df_sorted['B'].cummin()] print(result)
输出结果
| A | B |
|---|---|
| 1 | 8 |
| 2 | 5 |
| 6 | 2 |
内容的提问来源于stack exchange,提问作者Vine
相关产品推荐
相关产品推荐

