PySpark实现多Zone列的Category分组计数问题求助
解决方案
通用SQL实现
先通过UNION ALL将原表的两列拆分为行数据,再分组统计即可得到目标结果:
SELECT Category, Zone, COUNT(*) AS count FROM ( -- 提取Zone 1的分类数据 SELECT `Zone 1` AS Category, 'Zone1' AS Zone FROM your_table UNION ALL -- 提取Zone 2的分类数据 SELECT `Zone 2` AS Category, 'Zone2' AS Zone FROM your_table ) AS unpivoted_data GROUP BY Category, Zone ORDER BY Zone, Category;
Pandas实现(Python)
如果用Python处理表格数据,可通过melt函数转换表结构后分组统计:
import pandas as pd # 加载原始数据(实际场景可替换为读取文件) raw_data = { 'Zone 1': ['A', 'A', 'B', 'A', 'B'], 'Zone 2': ['A', 'B', 'A', 'B', 'B'] } df = pd.DataFrame(raw_data) # 转换表结构并统计数量 result_df = df.melt(var_name='Zone', value_name='Category') \ .replace({'Zone': {'Zone 1': 'Zone1', 'Zone 2': 'Zone2'}}) \ .groupby(['Category', 'Zone'], as_index=False) \ .size() \ .rename(columns={'size': 'count'}) # 按Zone和Category排序,匹配目标结果顺序 result_df = result_df.sort_values(['Zone', 'Category']) print(result_df)
内容的提问来源于stack exchange,提问作者Nabs335
相关产品推荐
相关产品推荐

