У меня есть дата-фрейм с датами, и я хочу выбрать самую высокую дату в каждую неделю, исключая выходные дни (поэтому, если возможно, с пятницы по пятницу), за исключением случаев, когда доступны данные с понедельника по пятницу и суббота / воскресенье..
Пример данных можно настроить следующим образом:
dates = pd.Series(data=['2018-11-05', '2018-11-06', '2018-11-07', '2018-11-08', '2018-11-09',
'2018-11-12', '2018-11-13', '2018-11-14', '2018-11-15', '2018-11-17',
'2018-11-19',
'2018-12-01',
])
nums = np.random.randint(50, 100, 12)
# nums
# array([95, 80, 81, 51, 98, 62, 50, 55, 59, 77, 69])
df = pd.DataFrame(data={'dates': dates, 'nums': nums})
df['dates'] = pd.to_datetime(df['dates'])
Записи, которые я хочу:
- 2018-11-09 - пятница
- 2018-11-15 - четверг (не 2018-11-17, потому что это суббота)
- 2018-11-19 - понедельник и единственный рекорд за эту неделю
- 2018-12-01 - суббота, но единственная запись за эту неделю
Мое текущее решение в ответе ниже , но я не думаю, что он идеален и имеет некоторые проблемы, с которыми мне пришлось работать,Вкратце, это:
- групповая неделя:
df.groupby(df['dates'].dt.week).apply(some_function)
- , если для этой недели есть только одна запись, верните ее
- , в противном случае выберите самую высокую / последнюю записьс днем <= пятница и верните это </li>
В идеале я хотел бы написать:
[latest Mon-Fri record] if [has Mon-Fri record] else [latest Sat-Sun record]