Как выполнить операцию pivot для нескольких столбцов в python pandas или big query. Предпочтительно по большому запросу

#python #pandas #google-bigquery #pivot #transpose

#python #pandas #google-bigquery #поворотный #транспонировать

Вопрос:

исходные данные:

введите описание изображения здесь

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

введите описание изображения здесь

Я пробовал использовать функцию melt в python pandas, но я могу поворачиваться только к одному столбцу. Я уверен, что я, должно быть, что-то упускаю.

Комментарии:

1. пожалуйста, публикуйте данные, а не фотографии

2. Поскольку нет данных usebale, посмотрите на stack / unstack и pd.pivot_table()

Ответ №1:

Ниже приведен стандартный SQL для BigQuery

 execute immediate (
with types as (
  select 
    array_to_string(types, ',') values_list,
    regexp_replace(array_to_string(types, ','), r'([^,] )', r'"1"') columns_list
  from (
    select regexp_extract_all(to_json_string(t), r'"([^""] )":') types
    from (
      select * except(Country, Branch, Category)
      from `project.dataset.your_table` limit 1
    ) t
  )
), categories as (
  select distinct Category  
  from `project.dataset.your_table`
)
select '''
select Country, Branch, Output, ''' || 
  (select string_agg(''' 
  max(if(Category = "''' || Category || '''", val, null)) as ''' || Category ) 
  from categories)
|| ''' 
from (
  select Country, Branch, Category, 
    type[offset(offset)] Output, val 
  from `project.dataset.your_table` t,
  unnest([''' || values_list || ''']) val with offset,
  unnest([struct([''' || columns_list || '''] as type)])
)
group by Country, Branch, Output
'''
from types
);   
 

если применяется к образцу данных в вашем вопросе — вывод

введите описание изображения здесь