Относительно следующего вопроса, который я задавал ранее: Сводка данных для pandas Python работает только с pivot_table (), но не с set_index () и unstack ()
Мне удалось повернутьследующие примеры данных успешно, используя set_index()
с unstack()
и pivot_table()
с параметром aggfunc=first
.
Пример данных :
id responseTime label answers
ABC 2018-06-24 Category_1 [3]
ABC 2018-06-24 Category_2 [10]
ABC 2018-06-24 Category_3 [10]
DEF 2018-06-25 Category_1 [7]
DEF 2018-06-25 Category_8 [10]
GHI 2018-06-28 Category_3 [7]
Желаемый результат:
id responseTime category_1 category_2 category_3 category_8
ABC 2018-06-24 [3] [10] [10] NULL
DEF 2018-06-25 [7] NULL NULL [10]
GHI 2018-06-28 NULL NULL [7] NULL
Код:
#this works but having issues with reset_index so leaving it here as comment.
#df=pdDF.pivot_table(index=['items_id','responseTime'], columns='label', values='answers', aggfunc='first')
df=pdDF.set_index(['items_id','responseTime','label']).unstack('label')
#reset the index so all columns can be preserved for table creation
df.reset_index(inplace=True)
#create pyspark dataframe from pandas dataframe after pivoting is done.
psDF=spark.createDataFrame(df)
#create hive table
psDF.write.mode('overwrite').saveAsTable('default.test_table')
Когда я использую второй фрагмент кода с set_index()
и unstack()
, результирующий вывод имеет дополнительный заголовок answers
при печати кадра данных.Это приводит к дублированию столбцов при создании таблицы кустов из этого фрейма данных.
Заголовок кадра данных перед reset_index ():
answers
id responseTime category_1 category_2 category_3 category_8
Столбцы кадра данных после reset_index:
('items_id', '')|('responseTime', '')|('answers', u'category_1')|('answers', u'category_2')|('answers', u'cateogry_3')|('answers', u'category_8')
Имена столбцов куста:
_'items_id'_''_
_'responsetime'_''_
_'answers'_u'category_1'_
_'answers'_u'category_2'_
_'answers'_u'category_3'_
_'answers'_u'category_8'_
Я считаю, что это происходит потому, что unstack()
создает иерархические столбцы с несколькими уровнями.Есть ли способ заставить уровень answer
исчезнуть и удалить эти символы подчеркивания мусора и ссылки answer
в самом фрейме данных, чтобы я мог создавать normal hive столбцы?