5

我试图找到最大值,因为在熊猫数据框中条件为真。我搜索了类似的问题并阅读了文档,但无法找到讨论的这个问题。为了说明,我想要一个函数,它将返回下面的 maxsince 列。

In [84]: df
Out[84]: 
                     a      b  maxsince
2007-04-27 11:00:00  1   True         1
2007-04-27 11:30:00  5  False         5
2007-04-27 12:00:00  3  False         5
2007-04-27 12:30:00  2   True         2
2007-04-27 13:00:00  2  False         2
2007-04-27 13:30:00  7   True         7
2007-04-27 14:00:00  3  False         7
2007-04-27 14:30:00  4  False         7

如果不使用循环,我无法计算这个。什么是最有效的方法?谢谢。

4

1 回答 1

11

怎么样:

>>> df.groupby(df["b"].cumsum())["a"].cummax()
2007-04-27  11:00:00    1
            11:30:00    5
            12:00:00    5
            12:30:00    2
            13:00:00    2
            13:30:00    7
            14:00:00    7
            14:30:00    7
dtype: int64

这有效,因为

>>> df["b"].cumsum()
2007-04-27  11:00:00    1
            11:30:00    1
            12:00:00    1
            12:30:00    2
            13:00:00    2
            13:30:00    3
            14:00:00    3
            14:30:00    3
Name: b, dtype: int32

每当我们看到 a 时,都会给我们一个新值True。当第一个值为 时,您可能需要根据您想要发生的情况对其进行一些修补False,但我将把它作为练习留给读者。;^)

于 2013-10-31T19:47:13.630 回答