У меня есть фрейм данных (data
), который содержит несколько дат (loss_date
, report_date
, good_date
), и я пытаюсь подсчитать определенные строки фрейма данных. Следующий код отлично работает при первом запуске:
# Set up bins
BUCKET_SIZE = 30
min_date = np.min(data.loss_date)
max_date = np.max(data.report_date)
num_days = (max_date - min_date).days
num_buckets = int(np.ceil(num_days/BUCKET_SIZE))
bounds = [min_date + timedelta(days = BUCKET_SIZE*i)
for i in range(0, num_buckets+1)
]
starts = bounds[0:len(bounds)-1]
ends = bounds[1:len(bounds)]
buckets = zip(starts, ends)
# Get data subset
l_data = data[data.good_date.notna()]
before = l_data[l_data.loss_date < l_data.good_date]
after = l_data[l_data.loss_date >= l_data.good_date]
# Define count function
def count_loss(df, start, end):
is_start = df.loss_date >= start
is_end = df.loss_date < end
count = len(df[is_start & is_end].index)
return(count)
# FIRST_TIME
count_before = [count_loss(before, s, e) for s,e in buckets]
Но теперь, когда я запускаю его снова, например,
# CODE_AGAIN
count_after = [count_loss(after, s, e) for s,e in buckets]
, я получаю список []
в качестве вывода. Однако, если я запускаю следующее:
# CODE_AGAIN (but redefining buckets)
buckets = zip(starts, ends)
count_after = [count_loss(after, s, e) for s,e in buckets]
, я получаю непустой список. После выполнения FIRST_TIME
почтовый индекс корзины становится пустым - и повторение buckets = zip(starts, ends)
устраняет проблему; т.е. CODE_AGAIN
работает как надо. Я не могу понять, почему!
Большое спасибо.