Фильтровать полярные данные, используя заданные интервалы времениPython

Программы на Python
Ответить
Anonymous
 Фильтровать полярные данные, используя заданные интервалы времени

Сообщение Anonymous »

Скажем, у меня есть 2 фрейма данных:
discount_dates



продукт
discount_start_date
discount_end_date




Iphone
31 декабря 2012 г.
03 марта 2013 г.


Iphone
31 января 2017 г.
03 декабря 2019 г.

Macbook
22 февраля 2013 г.
03 марта 2013 г.


Смотрю
31 декабря 2012 г.
03 марта 2013 г.


Смотрю
31 декабря 2013 г.
< td>2014-03-03


Смотрю
2014-12-31
2015-03-03



data_product



продукт
дата
n_sales




Iphone
01.03.2013
1432


Iphone
2013-03-022314


Iphone
03.03.2013
3200


Iphone
2013-03-04
123


Iphone
2017-02-04
22:30


Смотрю< /td>
01.04.2013
102


Смотрю
02 апреля 2013 г.
12


Смотрю
03.04.2013
234


Я хочу составить третий фрейм данных на основе data_product, содержащий только строки, где дата – это дата скидки, поэтому она содержится между Discount_start_date и Discount_end_date Discount_dates df.
result



продукт
дата
n_sales




Iphone
01.03.2013
1432


Iphone
2013-03-02
2314
< /tr>

Iphone
03.03.2013
3200


Iphone
04 февраля 2017 г.
2230



мой подход в полярах был следующим:

Код: Выделить всё

import polars as pl

discount_dates = {
"product": ["Iphone", "Iphone", "Macbook", "Iwatch", "Iwatch", "Iwatch"],
"discount_start_date": ["2012-12-31", "2017-01-31", "2013-02-22", "2012-12-31", "2013-12-31", "2014-12-31"],
"discount_end_date": ["2013-03-03", "2019-12-03", "2013-03-03", "2013-03-03", "2014-03-03", "2015-03-03"],
}

discount_dates = pl.DataFrame(discount_dates)

data_product = {
"product": ["Iphone", "Iphone", "Iphone", "Iphone", "Iphone", "Iwatch", "Iwatch", "Iwatch"],
"date": ["2013-03-01", "2013-03-02", "2013-03-03", "2013-03-04", "2017-02-04", "2013-04-01", "2013-04-02", "2013-04-03"],
"n_sales": [1432, 2314, 3200, 123, 2230, 102, 12, 234],
}

data_product = pl.DataFrame(data_product)

discount_dates = discount_dates.group_by("product").agg(pl.col("discount_start_date").min(), pl.col("discount_end_date").max())
data_product = data_product.join(discount_dates, on="product")
promo_product = data_product.filter((pl.col("date").is_between(*["discount_start_date","discount_end_date"])))

К сожалению, при этом не учитываются промежутки между интервалами скидок, и в приведенном выше примере promo_product оказывается равным data_product. Есть ли разумный способ решить эту проблему в полярных регионах?

Подробнее здесь: https://stackoverflow.com/questions/767 ... -intervals
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»