Раньше у меня был SQL-запрос для подсчета количества записей за определенный день в заданном месте.
Структура входных данных была такой: id, location, start_date, end_date
import pandas as pd
data = [('20170009003','0681','2017-07-25','2017-08-02'),
('20170009221','0682','2017-07-28','2017-08-02'),
('20170009271','0682','2017-07-31','2017-08-02'),
('20170009286','0681','2017-07-18','2017-09-19'),
('20170009654','0682','2017-07-28','2017-08-03'),
('20170010053','0681','2017-07-31','2017-08-04'),
('20170010059','0681','2017-07-20','2017-08-07')]
labels = ['idnum','loc','start_date','end_date']
df = pd.DataFrame.from_records(data, columns=labels)
Это дало бы мне количество (присутствующих) людей в данный день.то есть '2018-08-01', получит:
2018-08-01, 0681, 4
2018-08-01, 0682, 3
Я хотел бы получить аналогичный результат с python / pandas.
Если это поможет, sql(функция postgreql), используемая для достижения вышеуказанной цели:
CREATE OR REPLACE FUNCTION nb_present(oneday date)
RETURNS TABLE(ddj date, loc character, eff numeric)
LANGUAGE sql
AS $function$
SELECT $1, loc,sum(case when ($1= start_date and start_date_end_date) then 1
when $1=start_date then 0.5
when $1=end_date then 0.5
when ($1 > start_date and $1 < end_date) then 1
else 0 end)
from passage group by 1,2 order by 1,2;
$function$
Спасибо за вашу помощь.
PS: Это мой первый пост здесь.