主键与粒度:为什么对中国财报数据去重会删掉真实的行
简短回答: 唯一标识一行的字段,和描述这一行讲什么的那组字段,是两回事,而在财报数据里后者本来就会合法地重复。按它去重,你删掉的是真实的披露。常见症状是:每当有人「清洗」一次,数据集就悄悄变小一点。
把这个区别讲清楚一次
在数库财务附注中,每一行都带有 id,那是供应商自己声明的主键,在每一张表的每一次交付内都实测唯一。它才是标识一行的东西,也是供应商重述某个数字时你应当匹配的字段。
公司 × 报告期 × 标准化科目说明的是这一行讲什么,而它会重复,因为一张报表附注会针对同一家公司、同一期间、同一科目披露多条明细。按它去重会悄悄丢掉真实的行。请在这些字段上做汇总,永远不要把它们当作主键。(数据截止 2026-04-09。)
同样的陷阱,另外四处
SAM 的供应链图谱。 70,900 行中承载 66,053 条去重后的(primary_code、related_code、relation_category)连边。其中 3,122 条连边分布在两到三行上,因此 4,847 行、占 6.8%,是重复行。每一行都有自己的 id,确实唯一,那是声明的粒度。如果你按产品对关联或计数,请先按三元组去重,否则就会按这个比例虚增。(数据截止 2026-02-26。)
SmarTag 标签表。 每张标签表的粒度是 newsid 加上实体代码。一家公司可以通过 newsid 加 stockcode 加 companyid 在一篇文章中出现一次。统计实体数量时请按粒度汇总,而不是只按 newsid。(数据截止 2026-09-16。)
招投标图谱。 它是一个月度面板,因此同一对公司与主体会在多个月份重复出现。要看关系视图请按这一对去重,要看期间合计则按月份求和。这是两个不同的问题,而同一批行同时回答了它们。(数据截止 2026-05-29。)
多地上市公司,处处如此。 在 SAM、股权关系与 C2C 披露数据中,公司的事实会挂到它的每一只上市证券上,因此一家有两个上市地的公司在每个期间会出现两次。请按公司主键汇总或去重,而不是按 secu。在 SAM 中这个主键是 company_id2,在股权关系与 C2C 披露数据中是 company_id。这件事有它自己的页面,因为它是 A 股公司数量偏高最常见的原因。
评估副本与购买副本的形态不同
在你照着样本写代码之前,这一点值得知道。在 C2C(时点)与关系图谱(时点)中,Matrix 里的评估副本是预先解析过的:它被收敛成单一当前视图,即每个粒度上最新的 _known_date,并且删除组已被剔除。它带有 _known_date,但不带 _panel_op。购买后导出的版本带有完整面板与两者,而那正是你重放历史所需要的。
请在 Matrix 中评估形态,购买导出版本来做双时序工作。照着评估副本的粒度写出来的代码,遇到完整面板时不会存活。(数据截止 2026-08-22 与 2026-08-23。)