Как добавить отсутствующие даты в виде новых строк, а количество пропущенных дат должно быть равно нулю в pyspark? - PullRequest
0 голосов
/ 31 мая 2019

Я начал заниматься питоном.Я пытался очистить данные.Мой фрейм данных pyspark содержит Count и Date.Я хочу добавить отсутствующие даты в качестве новых строк, а количество пропущенных дат должно быть равно нулю.

Я пытался использовать эту технику Заполнение пробелов во временных рядах Spark

В этом методе используются временные метки и заполняются пробелы в минутах путем преобразования их в длинный тип данных.У меня только даты нет отметок времени.

Ниже приведен код, в котором я пытался получить минимальное и максимальное значения из фрейма данных.

Теперь я изо всех сил пытаюсь создать диапазон дат только с пропущенными датами и поместить его в новый фрейм данных.Затем объедините новый фрейм данных с оригинальным.


from pyspark.sql.functions import col, min as min_, max as max_


minp, maxp = existing_rules_search.select(
    min_("rule_date_cst").cast("date"), max_("rule_date_cst").cast("date")
).first()

Это то, что у меня есть в моем фрейме данных:

Col1    Col2    Col3       Count     rule_date_cst
12121   Apple   Apple Pie   1          3/28/2019
12121   Apple   Apple Pie   1          3/29/2019
12121   Apple   Apple Pie   1          4/4/2019
 

Ниже приведено то, что я ожидаю, что результаты появятся ..

Col1    Col2    Col3    Count   rule_date_cst
12121   Apple   Apple Pie   1   3/28/2019
12121   Apple   Apple Pie   1   3/29/2019
12121   Apple   Apple Pie   0   3/30/2019
12121   Apple   Apple Pie   0   3/31/2019
12121   Apple   Apple Pie   0   4/1/2019
12121   Apple   Apple Pie   0   4/2/2019
12121   Apple   Apple Pie   0   4/3/2019
12121   Apple   Apple Pie   1   4/4/2019

 

Нижеэто скриншот, который показывает вывод диапазона дат .. This is what I have tried to get as ranges


Я попробовал другой метод с использованием панд .. вот моя попытка.но это не сработало ..

min_date = min(existing_rules_search_search22['rule_date_cst']) 
max_date = pd.datetime.today().date() 
r = pd.date_range(start=existing_rules_search_search22.rule_date_cst.min(), end=existing_rules_search_search22.rule_date_cst.max()) 
existing_rules_search_search22.set_index('rule_date_cst').reindex(r).fillna(0.0).rename_axis('rule_date_cst').reset_index()
...