基于价值超过阈值的熊猫重新取样

时间:2018-06-16 16:05:16

标签: python pandas dataframe

我有一个包含2列的数据库。

import pandas as pd
data = pd.DataFrame({'a':[1,2,1,4,1,1,3,1,4,1,1,1],'b':[5,2,8,3,10,3,5,15,45,41,23,9]}) 

    a   b
0   1   5
1   2   2
2   1   8
3   4   3
4   1   10
5   1   3
6   3   5
7   1   15
8   4   45
9   1   41
10  1   23
11  1   9

每当自上一次出现以来的累积值超过列a的给定阈值时,是否有一种pythonic /最快的方法来挑选行索引?例如,在上面的df中,如果我的阈值是5,我会得到指数3,6,8。

我现在正在做的方法是遍历每一行,然后跟踪值何时超过它。我不是一个python专家想出一个潜在的(如果存在的话)更好的方法..

感谢

1 个答案:

答案 0 :(得分:1)

直到某人发明了一些pandas单行(如果可能),您可以尝试以下方法:

来自 IPython 会话:

In [393]: get_a_cumsum_lim = lambda df, col, threshold: df[col][df[col].cumsum() >= threshold]

In [394]: s, result = get_a_cumsum_lim(data, 'a', 5), []

In [395]: while not s.empty:
     ...:     idx = s.index[0]
     ...:     result.append(idx)
     ...:     s = get_a_cumsum_lim(data[idx+1:], 'a', 5)
     ...:     
     ...:     

In [396]: result
Out[396]: [3, 6, 8]