尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

VisiData 数据透视表(Pivot Table)完全指南:用聚合列将分组计数升级为多维透视

发布时间:2026/9/25 5:59:52

资讯中心
01
ARTICLE

VisiData 数据透视表(Pivot Table)完全指南:用聚合列将分组计数升级为多维透视

VisiData 数据透视表(Pivot Table)完全指南:用聚合列将分组计数升级为多维透视
数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载本文围绕 VisiData 的PivotSheet机制讲解如何把频率表Frequency Table扩展为真正的数据透视表以关键列分组、以当前列为列头、按聚合器汇总每个单元格。读者将掌握!key-col、aggregate-col、ShiftWpivot的完整操作链路理解默认count聚合与自定义聚合的替换规则并能通过Enter下钻到每个单元格背后的原始行。Pivot Table 的本质带更多列的频率表在 VisiData 中Pivot Table 就是分组方式更多、汇总维度更丰富的 Frequency Table。二者共享同一套分组与聚合心智模型频率表Frequency Table把行按某个列的值分成若干组bin并为带聚合器的源列生成汇总列参见 FrequencyTable.md透视表Pivot Table在此基础上再把当前列的不同取值变成列头于是每个单元格都对应某个分组 × 某个取值下的聚合结果。从源码看透视表由PivotSheet实现pivot.py其行类型为PivotGroupRow一个行代表一个分组内部记录PivotGroupRow (discrete_keys, numeric_key, sourcerows, pivotrows)其中discrete_keys是该分组的关键列取值列表numeric_key是数值分箱后的区间sourcerows是落入该分组的全部源行而pivotrows是一个{透视取值: 源行列表}的字典正是它支撑了每个单元格链接到原始行的能力pivot.py。创建透视表的命令定义在 pivot.pySheet.addCommand(W, pivot, vd.push(makePivot(sheet, keyCols, [cursorCol])), open Pivot Table: group rows by key column and summarize current column)也就是说按所有关键列keyCols分组把光标所在列作为透视列生成并压入一个PivotSheet。若需要逆操作把宽格式透视表还原为长格式参见 MeltGuide。创建透视表的四步操作1. 设置关键列key column用!命令名key-col把主列设为关键列。该列的值将出现在透视表左侧作为行标题数据集将按这些值分组。多个关键列可同时生效Shift!批量设置分组顺序与关键列顺序一致。该命令定义于 sheets.py!实际是一个切换开关依据cursorCol.keycol在key-col-onsetKeys([cursorCol])与key-col-off之间切换光标列标题前会出现标识。2.可选为列添加聚合器透视表单元格的默认聚合方法是count。若要汇总数值需在构建透视表之前用命令名aggregate-col为源列添加聚合器。每添加一个聚合器就会为每一个透视列生成一列聚合结果。命令定义于 aggregators.pySheet.addCommand(, aggregate-col, addAggregators([cursorCol], chooseAggregators()), Add aggregator to current column)按下后会弹出聚合器选择面板chooseAggregators支持 Tab 高亮、空格多选、数字快捷选择见 aggregators.py。当前仓库内置的聚合器包括聚合器说明返回类型min/max最小值 / 最大值继承源列sum求和继承源列avg/mean算术平均数值median/mode中位数 / 众数数值 / 继承源列stdev标准差浮点distinct去重后数量vlencount值的数量intlist值列表每行一个值继承源列q3/q4/q5/q10分位数族数值p10…p99各百分位数值keymin/keymax极值所在行的关键列值任意聚合器清单定义于 aggregators.py。注意任何自定义聚合器都会替换默认的count聚合——一旦某个透视列带上了自定义聚合器该列的count列就不会再生成。务必先设置合适的列类型数值列默认可能被推断为字符串类型聚合求和会得到错误结果。用%命令名type-float定义于 sheets.py或#type-intsheets.py为聚合目标列设置类型再执行。3. 移动光标到透视值列把光标移到需要对其每个取值做聚合的列上。该列的每个不同取值将成为透视表的列头。4. 创建透视表按ShiftW命令名pivot在当前列上创建透视表。透视表自动以源表名 _pivot_ 透视列名命名见 pivot.py 的命名逻辑并以异步线程加载大表也能保持界面响应pivot.py 将addAggregateCols与groupRows并行执行。完整操作序列对应官方示例步骤按键命令作用1!key-col在date列上设为关键列2ShiftWpivot在color列上创建透视表3qquit-sheet返回原 sales 表sheets.py4#type-float把price列类型设为 float5aggregate-col为price添加sum聚合6aggregate-col为price添加avg聚合7ShiftWpivot在color列上再次创建透视表官方示例逐步演示假设源表sales内容如下date color price ---------- ----- ----- 2024-09-01 R 30 2024-09-02 B 28 2024-09-03 R 100 2024-09-03 B 33 2024-09-03 B 99示例 A仅用默认 count 聚合在date列按!设为关键列光标移到color列按ShiftW创建透视表。得到按date分组、对color各取值计数的结果date R B ---------- - - 2024-09-01 1 0 2024-09-02 0 1 2024-09-03 1 2每个单元格的数字即该分组内该颜色的行数——这正是默认count聚合的体现。示例 B添加 sum 与 avg 聚合按q返回 sales 表在price列按#type-float设置类型按添加sum再按添加avg光标移到color列按ShiftW。每个聚合器都会为所有透视列各生成一列且自定义聚合替换默认 countdate sum_R avg_R sum_B avg_B ---------- ------ ------ ------ ----- 2024-09-01 30.00 30.00 0.00 2024-09-02 0.00 28.00 28.00 2024-09-03 100.00 100.00 132.00 66.00验证2024-09-03 的 B 色 price 为 33 与 99sum_B132、avg_B66R 色只有 100sum_Ravg_R100。透视表的列名生成规则从 pivot.py 的addAggregateCols可以看出列名由三个因素组合而成透视列数量只有一个透视列时列名为取值本身如R、B多个透视列时变为透视列名_取值如color_R聚合器与聚合列数量只有一个聚合列且只有一个聚合器时列名直接用聚合器名或取值否则用源列名_聚合器名_取值的组合例如price_sum_R聚合结果类型Column的类型取aggregator.type or aggcol.type即聚合器自带类型优先否则继承源列类型pivot.py。加载完成后所有AggrColumn会自动启用缓存重复查看单元格不会重复计算pivot.py。透视表与源行的双向关系透视表单元格与频率表一样每个单元格都链接到其背后的源行在透视表某行按Enteropen-row打开包含该分组全部源行的子表即row.sourcerows实现见 pivot.py在某单元格按zEnteropen-cell只打开该单元格对应取值下的源行即row.pivotrows.get(col.aggvalue)pivot.py。这在审计聚合结果、排查数据异常时非常实用任何一个汇总数字都能一键下钻还原成明细。数值分箱与相关选项透视表还支持把连续数值列分箱后再分组受以下选项控制定义于 freqtbl.pynumeric_binning默认False开启后数值型关键列不再按离散值分组而是按区间分组如0 - 10、10 - 20对应RangeColumn与formatRange实现pivot.pyhistogram_bins默认0数值分箱的区间数量为0时自动取行数平方根int(len(rows)**(1./2))pivot.pydisp_histogram默认■频率表直方图的绘制字符。注意透视表分组时只允许一个数值列参与分箱否则会报错only one numeric column can be binnedpivot.py。若所有取值相同区间宽度为 0或整数取值个数小于分箱数会自动退化为按离散值分箱degenerateBinning分支pivot.py。从透视到熔解Melt宽表还原为长表透视表把数据从长格式压成宽格式而Melt熔解就是它的逆操作——unpivot。在透视表上按ShiftM命令名melt定义于 features/melt.py会把所有非关键列收缩为Variable与Value两列透视表的每一格变成一行date Variable Value ---------- -------- ----- 2024-09-01 sum_R 30 2024-09-01 mean_R 30 2024-09-01 sum_B 0 ...若只想熔解部分列可按gShiftM并用正则如(\w)_(\w)把列名拆成聚合器与取值两部分实现部分熔解。完整的正反操作对照见 MeltGuide。常用命令速查按键命令名作用!key-col切换当前列为关键列aggregate-col为当前列添加聚合器ShiftWpivot在当前列上创建透视表Ffreq-col在当前列上创建频率表freqtbl.pygFfreq-keys按全部关键列创建频率表freqtbl.pyEnteropen-row打开当前行分组的源行子表pyobj.pyzEnteropen-cell打开当前单元格的源行子表pyobj.pyShiftMmelt熔解透视表还原为长格式features/melt.py测试用例与进一步探索仓库测试目录提供了可直接对照的透视操作回放脚本tests/pivot.vdj完整演示open-file→key-col→type-int→aggregate-col sum→aggregate-col mean→pivot的六步流程其期望输出见 tests/golden/pivot.tsvtests/pivot-noaggr.vd验证未添加聚合器时仅使用默认count的行为tests/pivot-error.vd 与 tests/aggregators-errors.vd覆盖聚合错误场景的容错。更深入的主题可继续阅读 FrequencyTable.md分组与聚合器机制、MeltGuide宽长格式互转以及聚合器源码 aggregators.py。赞分享数据分析CLI数据可视化【免费下载链接】visidataA terminal spreadsheet multitool for discovering and arranging data项目地址https://gitcode.com/gh_mirrors/vi/visidata点击查看免费下载相关推荐VisiData 频率表Frequency Table完全指南从分组计数到聚合透视的实战解析VisiData 频率表Frequency Table完全指南从分组计数到聚合透视的实战解析 导读 频率表Frequency Table是 Visi数据分析CLI数据可视化vxe-table数据透视表功能多维度数据分析工具vxe table数据透视表功能多维度数据分析工具 数据透视表Pivot Table企业级数据可视化的核心引擎 你是否还在为复杂报表开发效率低下而困扰前端UI组件用了九年的老Mac居然还能装新版macOS不到3步走通的0元实操用了九年的老Mac居然还能装新版macOS不到3步走通的0元实操 2015 年以前的 Mac 被官方升级名单除名了系统更新按钮直接消失。用 OpenCore操作系统固件驱动开发上一篇3个关键问题为什么你的旧Mac值得用OpenCore Legacy Patcher重获新生下一篇VMware macOS解锁工具Unlocker V3.1.1完整使用指南免费实现Windows/Linux系统运行macOS虚拟机创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。