无需新建列,按两列线性组合排序Pandas DataFrame
无需新建列的Pandas多列线性组合排序方法
当然不用新建列,有几种简便方法可以直接实现:
方法一:利用
sort_values的key参数直接计算组合值
直接在key函数里对DataFrame的指定列计算线性组合,返回的Series会作为排序依据:df.sort_values(key=lambda x: x['A'] * x['B'])运行后得到的结果就是按
A*B排序后的DataFrame:A B 0 4 1 1 2 3 (因为41=4,23=6,升序排序后原索引0在前,1在后)
方法二:用
eval处理复杂线性组合
如果你的线性组合更复杂(比如2*A + 3*B),用eval写起来更直观:df.sort_values(key=lambda x: x.eval('A * B')) # 复杂组合示例:df.sort_values(key=lambda x: x.eval('2*A + 3*B'))方法三:通过索引重排实现
先计算组合值的排序索引,再用loc重新排列DataFrame:df.loc[(df['A'] * df['B']).sort_values().index]
这些方法都不需要新增临时列,既节省内存,代码也更简洁。如果需要修改原DataFrame,加上inplace=True参数即可(不过更推荐返回新对象的写法,避免修改原数据)。
内容的提问来源于stack exchange,提问作者Firefighting Physicist
相关产品推荐
相关产品推荐

