python - 只保留熊猫中具有特定十进制值的行
问题描述
目前有一个大脑放屁,我不记得如何根据数字结尾的小数过滤掉数字。
说我的数据框是-
dic = {'product':['Bread','Milk','Eggs','Water','OJ','Cereal','Coffee',
'Apples','Banana','Muffin'],
'price':[3.89,2.99,4.00,0.69,1.99,2.39,5.00,0.99,0.98,1.50]}
df = pd.DataFrame(dic)
print(df)
带输出-
product price
0 Bread 3.89
1 Milk 2.99
2 Eggs 4.00
3 Water 0.69
4 OJ 1.99
5 Cereal 2.39
6 Coffee 5.00
7 Apples 0.99
8 Banana 0.98
9 Muffin 1.50
而且我只想保留以 .99、.00 和 .50 结尾的价格
我想要的输出是-
product price
1 Milk 2.99
2 Eggs 4.00
4 OJ 1.99
6 Coffee 5.00
7 Apples 0.99
9 Muffin 1.50
应该知道怎么做,只是暂时不记得了。
解决方案
如果这些是简单的货币(美元)金额,您可以将十进制值转换为整数(为避免浮动比较,这些可能导致错误答案),然后进行isin
检查:
df[df['price'].mul(100).mod(100).astype(int).isin([0, 50, 99])]
product price
1 Milk 2.99
2 Eggs 4.00
4 OJ 1.99
6 Coffee 5.00
7 Apples 0.99
9 Muffin 1.50
根据我的测试,这是两者中速度更快的一个。
另一个选项np.isclose
:
df[np.logical_or.reduce([
np.isclose(df['price'].mod(1), d) for d in [0, .99, .5]])]
product price
1 Milk 2.99
2 Eggs 4.00
4 OJ 1.99
6 Coffee 5.00
7 Apples 0.99
9 Muffin 1.50
推荐阅读
- dagger-2 - dagger android 对 androidx.fragment 的支持
- json - 在单个查询中将 JSON 写入表
- java - 无法通过 Jelastic 5.4 版上的部署管理器将 WAR 文件部署到 Tomcat
- c++ - 结构对象的指针成员在传递给函数时被修改
- r - 重叠(相交)时间间隔和 xts
- c# - 检测游戏是否在安卓模拟器中运行
- unit-testing - 测试接受在 Golang 中不返回值的回调函数的方法
- python - 在列表上执行 sum() 时如何替换 python 列表中的元素
- terraform - 从 Terraform 模块导入值
- rest-assured - 如何为基于 CURL 的 post 请求构建放心脚本