提问人:asongtoruin 提问时间:11/15/2023 更新时间:11/15/2023 访问量:38
polars - 获取包含每行最大值的列的名称
polars - get name of column containing max value per row
问:
在中,我可以选择执行以下操作以获取包含每行最大值的列的名称:pandas
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [5, 4, 3, 2, 1]})
df['Largest'] = df.idxmax(axis=1)
这让我:
一个 | b | 最大 | |
---|---|---|---|
0 | 1 | 5 | b |
1 | 2 | 4 | b |
2 | 3 | 3 | 一个 |
3 | 4 | 2 | 一个 |
4 | 5 | 1 | 一个 |
我怎样才能在?似乎没有方法,并且似乎只返回值而不是任何索引信息。polars
idxmax
max_horizontal
答:
2赞
ignoring_gravity
11/15/2023
#1
你可以做到
def arg_max_horizontal(*columns: pl.Expr) -> pl.Expr:
return (
pl.concat_list(columns)
.list.arg_max()
.map_dict({i: col_name for i, col_name in enumerate(columns)})
)
print(dfpl.with_columns(Largest=arg_max_horizontal("a", "b")))
然后你会得到
Out[11]:
shape: (5, 3)
┌─────┬─────┬─────────┐
│ a ┆ b ┆ Largest │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ str │
╞═════╪═════╪═════════╡
│ 1 ┆ 5 ┆ b │
│ 2 ┆ 4 ┆ b │
│ 3 ┆ 3 ┆ a │
│ 4 ┆ 2 ┆ a │
│ 5 ┆ 1 ┆ a │
└─────┴─────┴─────────┘
评论
0赞
asongtoruin
11/15/2023
这太完美了!我几乎得到了与这个答案类似的方法,但你的方法似乎要快得多。谢谢!
0赞
ignoring_gravity
11/16/2023
顺便说一句,如果您想在 Polars github 上解决问题,这可能是一个很好的功能请求
评论