如何按Name分组统计type列outgoing与incoming数量并分两列展示
问题描述
我有一张包含name和type列的表格,type列仅包含outgoing和incoming两个值。需要按name分组,将每个name对应的outgoing和incoming数量分别展示为独立列,实现如下统计效果:
原始表格
| name | type |
|---|---|
| A | outgoing |
| B | incoming |
| B | incoming |
| B | outgoing |
| C | incoming |
| B | incoming |
| A | outgoing |
预期结果
| Name | count Outgoing | count incoming |
|---|---|---|
| A | 2 | 0 |
| B | 1 | 3 |
| C | 0 | 1 |
解决方法
方法1:Excel数据透视表实现
- 选中原始表格数据区域,点击菜单栏插入 → 数据透视表
- 在透视表字段面板中:
- 将
name拖至行区域 - 将
type拖至列区域 - 将
type(或任意字段)拖至值区域,设置值汇总方式为计数
- 将
- 生成透视表后,将空白单元格用
Ctrl+H批量替换为0 - 调整列标题为预期的
count Outgoing和count incoming即可
方法2:Python Pandas代码实现
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'name': ['A', 'B', 'B', 'B', 'C', 'B', 'A'], 'type': ['outgoing', 'incoming', 'incoming', 'outgoing', 'incoming', 'incoming', 'outgoing'] }) # 生成交叉统计表格,填充缺失值为0 result = pd.crosstab(df['name'], df['type']).fillna(0).astype(int) # 重命名列名并调整顺序 result.columns = ['count incoming', 'count Outgoing'] result = result[['count Outgoing', 'count incoming']].reset_index().rename(columns={'name': 'Name'}) print(result)
运行后将直接输出与预期一致的统计结果。
方法3:SQL语句实现
假设原始表名为traffic,使用条件聚合即可完成统计:
SELECT name AS Name, COUNT(CASE WHEN type = 'outgoing' THEN 1 END) AS `count Outgoing`, COUNT(CASE WHEN type = 'incoming' THEN 1 END) AS `count incoming` FROM traffic GROUP BY name ORDER BY Name;
执行该语句将直接返回目标统计表格。
内容的提问来源于stack exchange,提问作者Vicky_Smaith
相关产品推荐
相关产品推荐

