我怀疑这种用法与
因此,第一组应包含
我最接近的解决方法是从
groupby
不兼容,所以也许我实际上正在寻求一种不同的模式来匹配我想要的内容。我有一个包含时间跨度事件的数据框,希望能够迭代/应用函数到每天的行上。但是如果一行从一天开始并在另一天结束,我希望该行被包含在两个日期中。start = pd.DatetimeIndex(start='2018-02-01 21:00:00',
end='2018-02-05, 21:00:00', freq='6h')
df = pd.DataFrame({'start': start.date, 'end': start.shift(1).date, 'value': 1},
columns=['start', 'end', 'value'])
start end value
0 2018-02-01 2018-02-02 1
1 2018-02-02 2018-02-02 1
2 2018-02-02 2018-02-02 1
3 2018-02-02 2018-02-02 1
4 2018-02-02 2018-02-03 1
5 2018-02-03 2018-02-03 1
6 2018-02-03 2018-02-03 1
7 2018-02-03 2018-02-03 1
8 2018-02-03 2018-02-04 1
9 2018-02-04 2018-02-04 1
10 2018-02-04 2018-02-04 1
11 2018-02-04 2018-02-04 1
12 2018-02-04 2018-02-05 1
13 2018-02-05 2018-02-05 1
14 2018-02-05 2018-02-05 1
15 2018-02-05 2018-02-05 1
16 2018-02-05 2018-02-06 1
因此,第一组应包含
[0,...,4]
,然后是[4,...,8]
等。实际上,事件并不均匀分布,因此每天的长度(按行计算)将不是恒定的。我最接近的解决方法是从
groupby.indices
开始,并操纵分组以符合我的需求,但这感觉相当糟糕。{k: np.append(v[0] - 1, v) for k, v in df.groupby('start').indices.items()
if not (len(v) == 1 and v[0] == 0)}
{Timestamp('2018-02-02 00:00:00'): array([0, 1, 2, 3, 4]),
Timestamp('2018-02-03 00:00:00'): array([4, 5, 6, 7, 8]),
Timestamp('2018-02-04 00:00:00'): array([ 8, 9, 10, 11, 12]),
Timestamp('2018-02-05 00:00:00'): array([12, 13, 14, 15, 16])}