gpt4 book ai didi

python - 如何在 Pandas 中将 argmin 与 groupby 一起使用

转载 作者:太空狗 更新时间:2023-10-29 21:31:54 28 4
gpt4 key购买 nike

假设我有一个像这样的 pandas 数据框:

  cat  val
0 a 1
1 a 6
2 a 12
3 b 2
4 b 5
5 b 11
6 c 4
7 c 22

而且我想知道,对于每个类别('cat' 的每个值),值最接近给定值的位置是什么,比如 5.5。我可以减去我的目标值并取绝对值,给我这样的东西:

  cat  val  val_delt
0 a 1 4.5
1 a 6 0.5
2 a 12 6.5
3 b 2 3.5
4 b 5 0.5
5 b 11 5.5
6 c 4 1.5
7 c 22 16.5

但我不知道下一步该去哪里。我的第一个想法是将 argmin() 与 groupby() 结合使用,但这会产生错误:

In [375]: df.groupby('cat').val_delt.argmin()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-375-a2c3dbc43c50> in <module>()
----> 1 df.groupby('cat').val_delt.argmin()

TypeError: 'Series' object is not callable

当然,我可以在标准 python 中想出一些可怕的 hacky 东西,我在其中迭代 cat 的所有值,然后选择与该值对应的数据子集,执行 argmin 操作,然后找出该行的原始数据框。但是必须有一种更优雅的方法来做到这一点。

我想要的输出是这样的:

  cat  val
1 a 6
4 b 5
6 c 4

或至少包含相关信息的某些结构(例如 - {'a':1, 'b':4, 'c':6} )。我不在乎是否取回索引值或索引位置,但我需要两者之一。我不关心取回值 - 一旦我有了索引子集,我总是可以稍后取回该值。

最佳答案

这里的所有答案都有些正确,但没有一个以简洁、漂亮和 Python 的方式做到这一点。我在这里留下了一个明确的方法来做到这一点。

>>> indx = df.groupby('cat')['val_delt'].idxmin()
>>> df.loc[indx]

cat val val_delt
1 a 6 0.5
4 b 5 0.5
6 c 4 1.5

关于python - 如何在 Pandas 中将 argmin 与 groupby 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com