如何在pandas DataFrame中查找指定列大于0的最小值
问题说明
现有名为df_percentage_change的DataFrame,内容如下:
Index End Date Change 0 2022-06-18 19:59:59.999 0 1 2022-06-18 20:29:59.999 -0.020028 2 2022-06-18 20:59:59.999 1.53509 3 2022-06-18 21:29:59.999 2.30751
需要通过单行代码获取Change列中大于0的最小值,上述示例的预期结果为1.53509。
自行编写的实现代码如下:
df_percentage_change["Change"].apply(lambda x: min(df_percentage_change["Change"]) if df_percentage_change["Change"] > 0)
运行代码后抛出报错:
SyntaxError: invalid syntax
正确实现
原代码报错原因有两点:
- Python三元表达式要求必须写
else分支,原代码缺失else部分,直接触发语法错误 - 不需要用
apply逐行遍历,用pandas原生的布尔筛选加聚合方法实现更简洁,运行效率也更高
正确单行代码:
df_percentage_change.loc[df_percentage_change["Change"] > 0, "Change"].min()
逻辑说明:先通过布尔条件筛选出Change列值大于0的所有记录,再对筛选后的列直接调用min()方法取最小值,运行即可得到目标结果1.53509。
如果要使用lambda函数实现(性能低于原生pandas方法,不推荐),修正后的写法为:
min(filter(lambda x: x > 0, df_percentage_change["Change"]))
内容的提问来源于stack exchange,提问作者NoahVerner
相关产品推荐
相关产品推荐

