Pandas组停止迭代

2024-06-02 21:10:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对组对象执行以下操作:

  • 获取间期时间

  • 设置范围,使用矢量化标记,其中

  • 在月经间隔时间内得到积温

    def deltat(g):
        try:
            g['tavg'] = g[ g['alert_v']==1 ]['timeindex'].diff(1)
    
            g['iqt'] = np.where( g['value'] > g['value'].quantile(.90) or g['value']< g['value'].quantile(.10),1,0)
            #pd.to_datetime(g[['tavg']], format='%H:%M:%S')
            #print type(g['tavg'] )
    
            g['cumt'] = g['tavg'].cumsum(0) #pd.rolling_sum(g['tavg'],2,0).shift(1)
            print g.head()
            return g
        except:
            pass
    
    d.sort_index(axis=0, inplace=True)
    d=d.groupby(['source','subject_id','alert_t','variable'],as_index=False,group_keys=False).apply(lambda x: deltat(x)) 
    

error: 我得到一个停止迭代错误。是什么原因造成的?为什么例外不只是通过?在

cumsum 我是否正确地使用了cumsum,还是需要使用滚动求和来获得列中每个后续两个时间值行的总和?在

-感谢任何帮助

--编辑: 以下是一些输入示例:

^{pr2}$

我需要的是带列的输出: tavg这是后面的时间差,其中{}是1。 iqt需要为高于/低于分位数级别的任何值设置1或0 cumt这是每个后续tavg值的累积和,即累积和

alert_v value timeindex tavg iqt cumt 1 3.1 6/13 NaN 0 NaN 1 2.9 6/14 1 0 1 0 .3 6/15 Nan 0 NaN 1 3.3 6/16 2 0 3 0 .3 6/17 NaN 0 NaN 0 .5 6/18 NaN 0 NaN 0 .2 6/19 NaN 1 NaN 1 3.8 6/20 4 1 7

尝试矢量化仍然会产生StopIteration错误:

 `gg['cumt'] = gg.apply(lambda x: pd.rolling_sum(x['tavg'],2, min_periods=2).shift(1) )`

或者 gg['cumt'] = gg.apply( lambda x: x['tavg'] + x['tavg'].shift(1)[1:] )

对于tavg和iqt,我使用这两种方法,但是在两个不同的函数中。。。把它们放在一个函数中会引起问题。在

  g['tavg'] = g[ g['alert_v']==1 ]['timeindex'].diff(1)
  g['iqt'] = g['value'].map(lambda x: x > g['value'].quantile(.90) and 1 or x < g['value'].quantile(.10) and 1 or 0)

警报值tavg iqt
时间索引
1984年12月12日13:33:00 0 86 NaT NaN
1984-12-12 14:08:00 0 85国家标准1
1984-12-12 14:08:00 0 85国家标准1
1984-12-12 14:08:00 0 84国家标准1
1984-12-12 14:08:00 0 84国家标准1
1984-12-12 14:08:00 1 82国家标准1
1984-12-12 14:25:00 1 83 00:17:00 1
1984-12-12 14:47:00 1 83 00:22:00 1
1984-12-12 16:37:00 0 88 01:50:00 1
1984-12-12 16:37:00 1 82 01:50:00 1
1984-12-12 16:37:00 0 90 01:50:00 1
1984-12-12 17:52:00 0 85 01:15:00 0
1984-12-12 17:52:00 1 95 01:15:00 0
1984-12-12 19:29:00 1 91 01:37:00 0
1984-12-12 19:29:00 0 95 01:37:00 0

不管怎样,如何计算过滤行的累计数?(感谢您的矢量化提示)


Tags: orlambdavalue时间alertnan矢量化pd