Проблема была вызвана опцией base
.В зависимости от значения base
, groupby не может создать правильное количество групп.
Поскольку в последней группе нет членов, filter
ничего не удаляет, а вторая группа просто повторяет точно то, чтопервый сделал.
Проблема возникает только в Python 3 с версией панды <0.24. </p>
Это можно воспроизвести, выполнив
"Generate test dataframe"
case = 1
if case == 1:
start = '2018-11-26 16:17:43.510000'
else:
start = '2018-11-26 16:17:43.500000'
rng = pd.date_range(start, periods=10, freq='1S')
df = pd.DataFrame({'a':np.random.randn(len(rng)),'b':np.random.randn(len(rng))}, index=rng)
"Set interval and start time of the buckets"
interval = dt.timedelta(minutes=10)
t0 = df.index[0]
base = t0.minute + (t0.second +t0.microsecond/1e6)/60
groups = df.groupby(pd.Grouper(freq=interval, base=base))
print(groups.size())
Это генерирует 2 группы (одна изпустой) в случае 1, но только 1 в случае 2.
Это было решено в пандах 0.24 и обсуждается здесь: https://github.com/pandas-dev/pandas/issues/25161