python 根据多列极坐标中的另一列条件(最大值)查找列值

x7yiwoj4  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(111)

如果我有这个 Dataframe :

pl.DataFrame(dict(x=[0, 1, 2, 3], y=[5, 2, 3, 3],z=[4,7,8,2]))
shape: (4, 3)
┌─────┬─────┬─────┐
│ x   ┆ y   ┆ z   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 0   ┆ 5   ┆ 4   │
│ 1   ┆ 2   ┆ 7   │
│ 2   ┆ 3   ┆ 8   │
│ 3   ┆ 3   ┆ 2   │
└─────┴─────┴─────┘

我想求出x中y为max时的值,然后再求出x中z为max时的值,再重复几百列,最后得到这样的结果:

shape: (2, 2)
┌────────┬─────────┐
│ column ┆ x_value │
│ ---    ┆ ---     │
│ str    ┆ i64     │
╞════════╪═════════╡
│ y      ┆ 0       │
│ z      ┆ 2       │
└────────┴─────────┘

shape: (1, 2)
┌─────┬─────┐
│ y   ┆ z   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 0   ┆ 2   │
└─────┴─────┘

什么是最好的极地方式做到这一点?

0lvr5msh

0lvr5msh1#

您可以:

  • pl.exclude("x"),选择所有列减去x
  • .arg_max()以获取每个选定列的最大索引。
  • 将索引传递给pl.col("x").take(),以获取每个索引处的x值。
  • pl.concat_list()以创建所有值的列表。
>>> df.select(pl.concat_list(pl.col("x").take(pl.exclude("x").arg_max())))
shape: (1, 1)
┌───────────┐
│ x         │
│ ---       │
│ list[i64] │
╞═══════════╡
│ [0, 2]    │
└───────────┘

要添加列名,您可以:
x一个一个一个一个x一个一个二个x
其他结果的可能方法:
一个三个三个一个

相关问题