У меня есть фрейм данных PySpark, в котором у меня есть отдельные столбцы для имен, типов, дней и значений. Пример кадра данных можно увидеть ниже:
+------+----+---+-----+
| Name|Type|Day|Value|
+------+----+---+-----+
| name1| a| 1| 140|
| name2| a| 1| 180|
| name3| a| 1| 150|
| name4| b| 1| 145|
| name5| b| 1| 185|
| name6| c| 1| 155|
| name7| c| 1| 160|
| name8| a| 2| 120|
| name9| a| 2| 110|
|name10| b| 2| 125|
|name11| b| 2| 185|
|name12| c| 3| 195|
+------+----+---+-----+
Для выбранного значения Type
я хочу создать отдельные кадры данных в зависимости от уникальных значений столбца под названием Day
. Допустим, я выбрал a
в качестве предпочтительного Type
. В приведенном выше примере у меня есть три уникальных значения Day
(, а именно . 1, 2 , 3
). Для каждого уникального значения Day
, в котором есть строка с выбранными Type
a
- (то есть дни 1
и 2
в приведенных выше данных), я хочу создать фрейм данных, в котором все строки имеютвыбранный выбранный Type
и Day
. В приведенном выше примере у меня будет два кадра данных, которые будут выглядеть следующим образом:
+------+----+---+-----+
| Name|Type|Day|Value|
+------+----+---+-----+
| name1| a| 1| 140|
| name2| a| 1| 180|
| name3| a| 1| 150|
+------+----+---+-----+
и
+------+----+---+-----+
| Name|Type|Day|Value|
+------+----+---+-----+
| name8| a| 2| 120|
| name9| a| 2| 110|
+------+----+---+-----+
Как я могу это сделать? В реальных данных, с которыми я буду работать, у меня есть миллионы столбцов. Итак, я хочу узнать о наиболее эффективном способе реализации вышеупомянутой цели.
Вы можете использовать приведенный ниже код для генерации приведенного выше примера.
from pyspark.sql import *
import numpy as np
Stats = Row("Name", "Type", "Day", "Value")
stat1 = Stats('name1', 'a', 1, 140)
stat2 = Stats('name2', 'a', 1, 180)
stat3 = Stats('name3', 'a', 1, 150)
stat4 = Stats('name4', 'b', 1, 145)
stat5 = Stats('name5', 'b', 1, 185)
stat6 = Stats('name6', 'c', 1, 155)
stat7 = Stats('name7', 'c', 1, 160)
stat8 = Stats('name8', 'a', 2, 120)
stat9 = Stats('name9', 'a', 2, 110)
stat10 = Stats('name10', 'b', 2, 125)
stat11 = Stats('name11', 'b', 2, 185)
stat12 = Stats('name12', 'c', 3, 195)