【问题标题】:Pandas Resampling based on Value exceeding thresholdPandas 根据超过阈值的值进行重采样
【发布时间】:2018-11-26 02:55:29
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2015-09-14
      • 2017-10-19
      相关资源
      最近更新 更多