如何找到正值最接近零的熊猫记录?

时间:2018-12-11 07:41:10

标签: python pandas

我需要找到值接近于零且为正的熊猫记录。

以下是数据的一小部分:

                 Date  Budget
0 2018-02-24 11:20:16    6.35
1 2018-02-24 11:34:10    5.85
2 2018-02-24 16:41:12    3.85
3 2018-02-25 00:55:18    1.10
4 2018-02-25 01:36:47   -0.90
5 2018-02-25 03:12:51   -1.90
6 2018-02-25 11:29:31   -2.90
7 2018-02-25 18:20:35   -3.65

我得到的最接近的答案是:

near_zero = df['Budget'].abs().min()

仅返回该值,而不返回记录加上该值是转换后的负值。 (索引[4]) 我需要一个搜索模式,用于该示例,同时返回两个列值index [3],即“预算”的最低正值

4 个答案:

答案 0 :(得分:2)

使用boolean indexing过滤正值,然后获取min

near_zero = df.loc[df['Budget'] > 0, 'Budget'].min()
print (near_zero)
1.1

,然后在可能的情况下持续几分钟:

df1 = df[df['Budget'] == near_zero]
print (df1)

                 Date  Budget
3 2018-02-25 00:55:18     1.1

或者,如果只有一个最小值,则感谢@coldspeed:

df1 = df.loc[[df.loc[df['Budget'] > 0, 'Budget'].idxmin()]]
print (df1)

                 Date  Budget
3 2018-02-25 00:55:18     1.1

答案 1 :(得分:0)

这将为您提供正确的值:

near_zero = df[df['Budget'] > 0].min()

答案 2 :(得分:0)

或尝试使用clip

near_zero=df['Budget'].clip(lower=0).replace(0,np.inf).min()

clip_lower

near_zero=df['Budget'].clip_lower(0).replace(0,np.inf).min()

这两种情况:

print(near_zero)

是:

1.1

答案 3 :(得分:0)

这是另一个具有裁剪功能的类似但有趣的解决方案

------------- START -----------
------------- END -----------

基本上是将小于0的值替换为列表中的最大值。