我有一些與開始和結束時間的事件這樣的數據:聚集事件與熊貓開始和結束時間
df = pd.DataFrame({'start': ['2015-01-05', '2015-01-10', '2015-01-11'], 'end': ['2015-01-07', '2015-01-15', '2015-01-13'], 'value': [3, 4, 5]})
df['end'] = pd.to_datetime(df['end'])
df['start'] = pd.to_datetime(df['start'])
日期:
end start value
0 2015-01-07 2015-01-05 3
1 2015-01-15 2015-01-10 4
2 2015-01-13 2015-01-11 5
現在我需要計算同時活動的事件數量,例如。它們的值的總和。所以結果應該是這樣的:
date count sum
2015-01-05 1 3
2015-01-06 1 3
2015-01-07 1 3
2015-01-08 0 0
2015-01-09 0 0
2015-01-10 1 4
2015-01-11 2 9
2015-01-12 2 9
2015-01-13 2 9
2015-01-14 1 4
2015-01-15 1 4
任何想法如何做到這一點?我正在考慮爲groupby使用自定義的Grouper,但據我所見,Grouper只能將一行分配給單個組,因此看起來不太有用。
編輯:一些測試,我發現這個相當醜陋的方式來獲得期望的結果後:
df['count'] = 1
dates = pd.date_range('2015-01-05', '2015-01-15', freq='1D')
start = df[['start', 'value', 'count']].set_index('start').reindex(dates)
end = df[['end', 'value', 'count']].set_index('end').reindex(dates).shift(1)
rstart = pd.rolling_sum(start, len(start), min_periods=1)
rend = pd.rolling_sum(end, len(end), min_periods=1)
rstart.subtract(rend, fill_value=0).fillna(0)
然而,這僅與資金運作,我不能看到一個明顯的方法,使其與工作其他功能。例如,有沒有辦法讓它與中位數而不是總和一起工作?
讓人聯想到計數纏繞或開合分隔符,但不清楚如何移植算法。 – cphlewis 2015-03-14 02:48:58