我有一個Pandas DataFrame訂閱,每個訂閱都有一個開始日期時間(時間戳)和一個可選的結束日期時間(如果它們被取消)。使用日期範圍創建一個來自DataFrame的Pandas每日總計時間系列
爲了簡單起見,我基於開始和結束日期時間(時間戳)爲日期創建了字符串列(例如「20170901」)。它看起來像這樣:
df = pd.DataFrame([('20170511', None), ('20170514', '20170613'), ('20170901', None), ...], columns=["sd", "ed"])
最終的結果應該是一個時間序列的許多訂戶是如何活躍在範圍內的任何給定的日期。
爲此,我創建了一個指數的所有天的範圍內:
days = df.groupby(["sd"])["sd"].count()
我能創造什麼,我有一個循環,在整個數據幀的每個執行查詢興趣df
。
count_by_day = pd.DataFrame([ len(df.loc[(df.sd <= i) & (df.ed.isnull() | (df.ed > i))]) for i in days.index], index=days.index)
注意,我每天在原始數據集的值,因此不存在任何差距。我確定日期範圍可以改進。
實際的問題是:是否有一種有效的方法來計算這個大型初始數據集df,具有數千行?看來我使用的方法在複雜度上是二次的。我也試過df.query(),但它比Pythonic濾波器慢了66%,並沒有改變複雜性。
我試圖搜索熊貓文檔的例子,但我似乎使用了錯誤的關鍵字。有任何想法嗎?
謝謝!一些代碼模式比我的問題中的代碼好得多。 – mike921