У меня есть строки, представляющие диапазоны (from
->to
). Вот подмножество данных.Подсчитайте количество дней в нескольких диапазонах
df = DataFrame({'from': ['2015-08-24','2015-08-24'], 'to': ['2015-08-26','2015-08-31']})
from to
0 2015-08-24 2015-08-26
1 2015-08-24 2015-08-31
Я хочу рассчитать количество рабочих дней для каждого дня в диапазонах. Вот мой код.
# Creating a business time index by taking min an max values from the ranges
b_range = pd.bdate_range(start=min(df['from']), end=max(df['to']))
# Init of a new DataFrame with this index and the count at 0
result = DataFrame(0, index=b_range, columns=['count'])
# Iterating over the range to select the index in the result and update the count column
for index, row in df.iterrows():
result.loc[pd.bdate_range(row['from'],row['to']),'count'] += 1
print(result)
count
2015-08-24 2
2015-08-25 2
2015-08-26 2
2015-08-27 1
2015-08-28 1
2015-08-31 1
Он работает, но кто-нибудь знает более вещий способ сделать это (то есть без петли for
)?
Это странно, в моем маленьком тесте с набором данных из 7361 строк, я получить следующие результаты: - Начальное решение 9,31 сек - Johne решение 3.123 сек - Последнее решение 0,431 сек - HYRY решения 0,077 s I» м, несовместимый с раствором HYRY. Огромное спасибо за всю вашу работу по этому вопросу. Мне было очень интересно изучить эти ответы. – Romain
Хмм, эти результаты мне удивительны, но я только приурочил образец данных, предоставленный в вопросе, который может не обобщать на больший (и другой) фрейм данных, поэтому я удалил свой предыдущий комментарий. Спасибо за продолжение. – JohnE