У меня есть два набора данных:
- Один содержит сертификаты энергии дома, выданные за последние 10 лет, с идентификатором дома и датой его выдачи. В одном доме может быть выдано больше сертификатов, поскольку они могут продлевать его.
- В другом домике содержатся все транзакции домов за последние 10 лет и идентификатор (такой же идентификатор, как в первом наборе данных)
Я объединил их, используя
mergeALL= pd.merge(mergeTranDwelling,EnergySimple, left_on=['matrikkel2019', "bygningsnr"], right_on=['matrikkel2019', 'Bygningsnummer'], how='inner')
Затем я получил что-то вроде этого (фрагмент кода данных):
transaction_id address_id official_date certificate issued_date
83866285 1157600091 2016-05-25 A2012-278940 17.12.2012 17:44:17
83866285 1157600091 2016-05-25 A2012-278941 17.12.2012 17:48:35
83866285 1157600091 2016-05-25 A2016-638538 22.02.2016 10:16:12
83866285 1157600091 2016-05-25 A2016-638577 22.02.2016 10:22:45
83866285 1157600091 2016-05-25 A2019-1065662 21.10.2019 15:39:30
Поскольку каждый дом может иметь несколько значений сертификатов энергии к каждой транзакции можно прикрепить несколько сертификатов. Я хочу, чтобы каждый action_id имел сертификат с .Did_Date , который находится ближе всего, но до official_date . В приведенном выше случае я хочу удалить все сертификаты для этого tranasction_id , за исключением:
83866285 1157600091 2016-05-25 A2016-638577 22.02.2016 10:22:45
Я пытался использовать это решение: { ссылка }, но у меня есть чтобы объединить наборы данных в двух столбцах (matrikkel2019, bygningsr), поэтому я не могу использовать merge.asof.
Я также открыт для выполнения слияния другим способом (это еще один вопрос о той же проблеме: Слияние двух DataFrames (наборов данных) в указанном столбце c ID, но с условием Date )