#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
);
если применяется к образцу данных в вашем вопросе — вывод