如何在 python pandas 或大查询上对多个列进行枢轴操作。最好在大查询上
Posted
技术标签:
【中文标题】如何在 python pandas 或大查询上对多个列进行枢轴操作。最好在大查询上【英文标题】:How to do pivot operation on multiple columns on python pandas or big query. Preferably on big query 【发布时间】:2021-02-28 17:48:41 【问题描述】:原始数据:
所需转换后数据的外观:
我在 python pandas 中尝试过 melt 功能,但我只能在一列上旋转。我确定我一定错过了什么。
【问题讨论】:
请发数据,不要发图片 由于没有有用的数据,请查看 stack/unstack 和 pd.pivot_table() 【参考方案1】:以下是 BigQuery 标准 SQL
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
);
如果应用于您问题中的样本数据 - 输出是
【讨论】:
以上是关于如何在 python pandas 或大查询上对多个列进行枢轴操作。最好在大查询上的主要内容,如果未能解决你的问题,请参考以下文章
Python学习第135天(Django的ORM多对多查询)