如何按ID分组,将Status列值的计数拆分为独立列?
实现数据透视统计的几种方法
你需要对ID分组,分别统计每个ID对应的Enabled和Disabled状态数量,以下是不同工具下的实现方式:
SQL 实现
如果数据存储在数据库中,可通过GROUP BY结合条件计数完成转换:
SELECT ID, COUNT(CASE WHEN Status = 'Enabled' THEN 1 END) AS `Count Enabled`, COUNT(CASE WHEN Status = 'Disabled' THEN 1 END) AS `Count Disabled` FROM your_table GROUP BY ID;
原理:按ID分组后,用CASE WHEN筛选对应状态的行,COUNT会自动忽略不符合条件的NULL值,从而得到各状态的准确计数。
Python Pandas 实现
如果用Python处理数据,Pandas的透视表功能可快速完成需求:
import pandas as pd # 构造原始数据(实际场景可从文件/数据库读取) df = pd.DataFrame({ 'ID': ['A', 'A', 'A', 'B', 'B'], 'Status': ['Enabled', 'Disabled', 'Enabled', 'Enabled', 'Disabled'] }) # 方法1:使用pivot_table result_df = df.pivot_table( index='ID', columns='Status', aggfunc='size', fill_value=0 ).rename(columns={'Enabled': 'Count Enabled', 'Disabled': 'Count Disabled'}).reset_index() # 方法2:使用crosstab(更简洁的交叉表实现) result_df = pd.crosstab( df['ID'], df['Status'] ).rename(columns={'Enabled': 'Count Enabled', 'Disabled': 'Count Disabled'}).reset_index() # 输出结果 print(result_df)
两种方法都会生成符合要求的表格,fill_value=0确保无对应状态的ID显示0而非空值。
Excel 实现
如果用Excel处理,可通过数据透视表快速完成:
- 选中原始数据区域,点击「插入」选项卡的「数据透视表」,选择表格放置位置
- 在数据透视表字段面板中:
- 将「ID」拖到「行」区域
- 将「Status」两次拖到「值」区域
- 对第一个值字段(Status):
- 右键点击值字段 → 「值字段设置」,将计算类型改为「计数」
- 再次右键 → 「值字段设置」→ 「自定义名称」输入「Count Enabled」
- 点击「值筛选」→ 「等于」,选择「Enabled」
- 对第二个值字段重复上述操作,自定义名称改为「Count Disabled」,筛选条件选择「Disabled」
- 调整列顺序即可得到目标表格
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

