在 pandas DataFrame 中有条件地选择数据

Conditional selection of data in a pandas DataFrame

我的 pandas DataFrame 中有两列。

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

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

有人可以帮我吗?

要在 B 列中找到最小值,您可以使用 df.B.min()。对于你的 DataFrame 这个 returns 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 列中选择相应的值。

这种方法returnsA中的所有值对应B中的最小值。如果只需要找到其中一个值,更好的方法是使用idxmin作为@aus_lacy 建议。

这是一种方法:

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

idxmin() returns 列 B 中最小值的索引。然后,您在 A.

列的同一索引处找到该值

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

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

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

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

我的解决方案是 return 第一个实例 B 的最小值所在的位置,在本例中位于第三行,并且对应的 A 值为 3。如果您认为 B 的最小值不是唯一的,那么您应该使用@ajcr 的解决方案。