【问题标题】:Conditional selection of data in a pandas DataFramepandas DataFrame 中数据的条件选择
【发布时间】:2015-03-22 14:29:02
【问题描述】:

我的 pandas DataFrame 中有两列。

   A      B
0  1      5
1  2      3
2  3      2
3  4      0
4  5      1

我需要 A 中 B 的值最小的值。在上述情况下,我的答案是 4,因为最小 B 值为 0。

谁能帮帮我?

【问题讨论】:

  • 不清楚你的桌子是什么样子的。请以可读的方式格式化。
  • ryanyuyu ...现在怎么样?
  • 是的,现在您的表格可读了。
  • idxmin 是专门为此设计的

标签: python pandas dataframe min


【解决方案1】:

要查找 B 列中的最小值,您可以使用 df.B.min()。对于您的 DataFrame,这将返回 0

要在 DataFrame 中的特定位置查找值,您可以使用 loc

>>> df.loc[(df.B == df.B.min()), 'A']
3    4
Name: A, dtype: int64

所以在这里,loc 挑选出 B 列等于其最小值 (df.B == df.B.min()) 的所有行,并在 A 列中选择相应的值。

此方法返回 A 中与 B 中最小值对应的所有值。如果您只需要找到其中一个值,更好的方法是使用 @aus_lacy 建议的idxmin

【讨论】:

  • 如果B 列中的最小值不是唯一的,则此解决方案比我的解决方案要好。
  • 只是为了保持简写,可能需要使用df.A.loc[df.B == df.B.min()]
【解决方案2】:

这是一种方法:

b_min = df.B.idxmin()
a_val = df.A[b_min]

idxmin() 返回列B 中最小值的索引。然后在列A 中找到相同索引处的值。

或者如果你想要一个单行,尽管可读性较差,你可以这样做:

a_val = df.A[df.B.idxmin()]

此外,作为免责声明,此解决方案假定B 列中的最小值是唯一的。例如,如果您有一个如下所示的数据集:

A  B
1  2
2  5
3  0
4  3
5  0

我的解决方案将返回B 的最小值所在的第一个实例,在这种情况下位于第三行,并且对应的A 值为3。如果您认为B 的最小值不是唯一的,那么您应该使用@ajcr 的解决方案。

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2016-10-06
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多