2013-10-31 166 views
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 

我無法通過循環計算這個問題。什麼是最有效的方法?謝謝。

+0

是df.groupby('b')。max()你在找什麼? – Pedro9

+0

不,我正在尋找像cummax()那樣重置'b'中的每個True的東西。 – user2205

回答

9

如何:

>>> 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 

給我們帶來了新的價值,每當我們看到一個True。當第一個值爲False時,您可能需要對其進行修補,具體取決於您想要發生的情況,但我會將其作爲練習給讀者。 ; ^)

+0

不錯的一個。菜譜值得嗎? – TomAugspurger

+0

+1我以爲是用pd.rolling_apply和group來做這個,但是這個明顯更好 –

+0

你使用的是什麼版本的熊貓?版本0.12.0給了我ValueError:當我嘗試df [「b」]。cumsum()時,不能將float NaN轉換爲整數。 – user2205