2015-04-24 85 views
1

我對熊貓相對較新,並試圖找出計算此信息的最佳方式,因此非常感謝所有幫助。基本上我有一個數據幀,看起來像這樣:「每過多少天帳號激活」使用熊貓數據框計算基於間隙長度的活動日期

id  activity_date 
1  2015-01-01  
1  2015-01-02  
1  2015-01-03  
2  2015-01-02  
2  2015-01-05  
3  2015-01-10  

我想計算的以下信息,我明白,我可以簡單地做一個計數來獲取這些信息,但我想要應用以下限制:「如果活動日期之間有n天,則只計算該差距之前的天數」。

例如,其中n = 5以下應返回天的激活數爲4,而不是6

id  activity_date 
1  2015-01-01  
1  2015-01-02  
1  2015-01-04 
1  2015-01-06 
1  2015-01-14 
1  2015-01-15 

回答

1

瞭解你想要什麼,這是更簡單後,讓我們計算是否之間的差異當前和以前的行大於5天給了我們一個布爾序列,我們使用這個過濾器的DF,然後使用索引值來執行切片:

In [57]: 

inactive_index = df[df['activity_date'].diff() > pd.Timedelta(5, 'd')] 
inactive_index 
Out[57]: 
    id activity_date 
4 1 2015-01-14 

In [18]: 

inactive.index 
Out[18]: 
Int64Index([4], dtype='int64') 
In [58]: 

df.iloc[:inactive.index[0]] 
Out[58]: 
    id activity_date 
0 1 2015-01-01 
1 1 2015-01-02 
2 1 2015-01-04 
3 1 2015-01-06 
+0

謝謝,這真的很有幫助。我想我可能會讓我的狀況不清楚,但這可能會計算出不同的結果。你的片段似乎總結了timedelta小於5的日子,我期待在第一次出現5天三角洲之後放棄日子,而不是僅僅折扣那個三角洲的日子。例如,如果你從1日到10日,然後再從18日到30日,那還只是10天。 –

+0

對不起,您必須解釋如何在該示例的10天內到達 – EdChum

+0

因此,您每天花費的時間是「活動日」,任何一天您都不是非活動日,並且如果您的活動日數超過5天我想連續設置一個「停用」標誌並停止計算活動日期。 –