我有一个包含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专家想出一个潜在的(如果存在的话)更好的方法..
感谢
答案 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]