我需要通过自定义聚合函数对数据帧进行排序,例如,它们的值的总和,类似于带有 key 参数的 sorted 函数:
sorted([(1, 10), (1, 2), (2, 3)], key=sum)
给出:
[(1, 2), (2, 3), (1, 10)]
我知道在 pandas 中我可以创建一个新的聚合列并按列排序:
df = pd.DataFrame([(1, 10), (1, 2), (2, 3)])
df[2] = df.sum(axis=1)
df.sort_values(2).drop(2, axis=1)
但如您所见,它不如使用 sorted() 的 python 解决方案优雅。 由于 sort_values() 不采用键参数,因此在不创建新列的情况下按键对数据框中的值进行排序的方法是什么?
请您参考如下方法:
无需添加虚拟列,只需使用 df.sum(1) 的结果来索引您的数据框:
df.loc[df.sum(1).argsort()]
# Use @jezraels answer if the index is not range(len(df.index))
0 1
1 1 2
2 2 3
0 1 10
