我有一些与开始和结束时间的事件这样的数据:聚集事件与熊猫开始和结束时间
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