我有一个数据框,其中有一些时间序列平衡。看起来像
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%),然后计算出其中有多少是True。
问题在于这真的很慢,而且我确定Pandas具有某种功能,可以正常执行我所要查找的功能。
谢谢!
答案 0 :(得分:0)
您可以使用:
(portfolio_values < starting_values*.9).any().sum()
any
对于至少满足条件的每一列返回True,然后使用sum来计算列数或根据您的情况计算“运行”。
答案 1 :(得分:0)
尝试一下:
mask_df = df < starting_value*0.9
result = mask_df.any()
我在虚拟示例中的控制台中对其进行了测试,它似乎可以正常工作。