如何基于c、d列之和对pandas DataFrame进行升序排序
按c、d列和升序排序实现方案
直接用sort_values的key参数传入两列求和的排序规则即可,不需要给DataFrame新增永久列,最终返回的结果会完整保留原有的a、b、c、d四个列,仅调整行顺序。
完整可运行代码如下:
import numpy as np import pandas as pd # 原测试数据生成逻辑 d = [] for i in range(5): d.append({ 'a': np.random.rand(), 'b': np.random.rand(), 'c': np.random.rand(), 'd': np.random.rand(), }) d = pd.DataFrame(d) # 按c列、d列的数值和升序排序 sorted_df = d.sort_values(by='c', key=lambda _: d['c'] + d['d'], ascending=True)
补充说明
ascending=True指定排序方式为升序,需要降序时改为False即可- 上述写法在pandas 1.1.0及以上版本均可正常使用
- 如果你使用的是更早的pandas版本,可以用索引重排的兼容写法,效果完全一致:
# 旧版pandas兼容方案 sorted_df = d.iloc[(d['c'] + d['d']).argsort()]

内容的提问来源于stack exchange,提问作者Zohim
相关产品推荐
相关产品推荐

