我有一个包含多个列的子帧,其中第一列被视为索引.剩余的列包含我希望按绝对键排序的值,然后创建新的rabrame,以索引和排序值的列表示原始rabrame位置.如果有人能给如何用更Python 的方式来做,我非常感激.

import polars as pl
import numpy as np

df = pl.DataFrame({
    "name": ["a", "b", "c", "d", "e", "f"],
    "val1": [1.2, -2.3, 3, -3.3, 2.2, -1.3],
    "val2": [5, 2, 2, -4, -3, -6]})

vals = df[df.columns[1:]].to_numpy()
sorted_vals = sorted(tuple(vals.reshape(-1,)), key=abs)[::-1]

data = []
for sv in sorted_vals:
    i, c = int(np.where(vals==sv)[0][0]), int(np.where(vals==sv)[1][0])
    data.append([sv, df[i,'name'], df.columns[1+c]])

new_df = pl.DataFrame(data=data, orient='row', schema=['val', 'name', 'col'])

print(new_df)

# shape: (12, 3)
# ┌──────┬──────┬──────┐
# │ val  ┆ name ┆ col  │
# │ ---  ┆ ---  ┆ ---  │
# │ f64  ┆ str  ┆ str  │
# ╞══════╪══════╪══════╡
# │ -6.0 ┆ f    ┆ val2 │
# │ 5.0  ┆ a    ┆ val2 │
# │ -4.0 ┆ d    ┆ val2 │
# │ -3.3 ┆ d    ┆ val1 │
# │ …    ┆ …    ┆ …    │
# │ 2.0  ┆ b    ┆ val2 │
# │ 2.0  ┆ b    ┆ val2 │
# │ -1.3 ┆ f    ┆ val1 │
# │ 1.2  ┆ a    ┆ val1 │
# └──────┴──────┴──────┘

推荐答案

你应该使用meltsort(绝对值的表达式为abs):

out = (df.melt('name', variable_name='col', value_name='val')
         .sort(pl.col('val').abs(), descending=True)
      )

输出:

shape: (12, 3)
┌──────┬──────┬──────┐
│ name ┆ col  ┆ val  │
│ ---  ┆ ---  ┆ ---  │
│ str  ┆ str  ┆ f64  │
╞══════╪══════╪══════╡
│ f    ┆ val2 ┆ -6.0 │
│ a    ┆ val2 ┆ 5.0  │
│ d    ┆ val2 ┆ -4.0 │
│ d    ┆ val1 ┆ -3.3 │
│ …    ┆ …    ┆ …    │
│ b    ┆ val2 ┆ 2.0  │
│ c    ┆ val2 ┆ 2.0  │
│ f    ┆ val1 ┆ -1.3 │
│ a    ┆ val1 ┆ 1.2  │
└──────┴──────┴──────┘

Python-3.x相关问答推荐

如何翻转以列形式给出的日期间隔并提取多个重叠时段内每小时的音量?

pandas查找另一列中是否存在ID

如何将python点击参数设置为与选项回调不同的参数的别名?

如何创建与导航抽屉一起使用的导航栏

PyTest:尽管明确运行了测试,但是被标记为没有运行测试

基于组/ID从原始数据框中创建两个子数据框

Python base64.b32hexencode 未创建预期结果

如何使用 Selenium 和 Python 作为线程来使用事件(Chrome-Developer-Tools)?

如何在 django 中没有循环的情况下获得前键的前键?

Jupyter Notebook - 在函数内绘图 - 未绘制图形

导入 python 模块而不实际执行它

通过多个键对字典列表进行分组和聚合

如何等待 create_task() 创建的任务完成?

如何使用 Python 订阅 Websocket API 通道?

导入父目录进行简要测试

map 对象不是 JSON 可序列化的

如何在python中创建代码对象?

如何在 Python 3.2 中退出?

Django Rest 框架 ListField 和 DictField

十六进制字符串到 Python 3.2 中的带符号整数?