我需要找到值接近于零且为正的熊猫记录。
以下是数据的一小部分:
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],即“预算”的最低正值
答案 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()
near_zero=df['Budget'].clip_lower(0).replace(0,np.inf).min()
这两种情况:
print(near_zero)
是:
1.1
答案 3 :(得分:0)
这是另一个具有裁剪功能的类似但有趣的解决方案
------------- START -----------
------------- END -----------
基本上是将小于0的值替换为列表中的最大值。