python-3.x - df.apply(lambda x: x.value_counts()) 的矢量化版本
问题描述
我有一个包含大量时间序列余额的数据框。它看起来像
Run1 Run2 Run3 ... Run10000
2018 100 100 100 100
2019 101.2 99.2 101.0 ... 101.6
...
2038 142.2 151.3 102.7 ... 173.0
本质上,我想查看有多少试验运行低于某个数字,例如起始余额的 90%。
目前我正在做
((portfolio_values < starting_value*0.9).apply(lambda x: x.value_counts()).loc[True] > 0).value_counts().loc[True]
抱歉,一个班轮非常糟糕,但想法是它根据表中的值是否低于起始值的 90% 创建一个掩码,然后它会通过并计算 True 和 False 值。然后它检查哪些列有一些非零数量的 True 值(意思是,它确实下降到 90% 以下),然后计算这些值中有多少是真实的。
问题是这真的很慢,而且我确信 Pandas 有某种功能可以完全满足我的需求,就像它通常那样。
提前致谢!
解决方案
你可以使用:
(portfolio_values < starting_values*.9).any().sum()
any
对于在列中至少满足一次条件的每一列返回 True,然后使用 sum 来计算列或在您的情况下“运行”。
推荐阅读
- javascript - 当 AJAX 加载成功完成时做一些事情
- python - 在熊猫中分隔数据框
- flask - Flask:为使用 Openpyxl 创建的 Excel 文件创建可下载链接
- wordpress - 从除类别(WP)之外的永久链接中删除尾部斜杠
- c# - 防止 cookie 重播/cookie 被多个客户端使用
- linux - 无法从 USB 驱动器下载驱动程序
- git - MAC OS 上的 Visual Studio Code 和 GIT
- html - 用 UTF-8 字符保存 html
- scala - Json4S 创建具有更新值的新对象
- bash - Bash - 分配变量 - Yad 窗格笔记本