You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pandas pivot_table保留所有索引行并实现计数统计?

解决pivot_table丢失原始索引行的问题

问题描述:df1与df2左连接后,使用pivot_table做计数统计时,shtuff索引行从结果中缺失,需要保留该行并填充0值。

原因分析

左连接后,shtuff对应的C值为3,而df2中不存在C=3的记录,因此merge后的结果里D列全为NaN。pivot_table的count聚合函数会忽略NaN值,导致这一行被过滤。

解决方案

方法一:替换聚合函数为size

size会统计每组的总行数(包含NaN),能直接保留所有原始索引行,是最简洁的解决方式:

import pandas as pd

df1 = pd.DataFrame({"A": ["foo", "bar", "shtuff"],
                   "B": ["one", "two", "one"],
                   "C": [1, 2, 3]})

df2 = pd.DataFrame({"C": [1,2,2,1,2,1,1,2,2],
                   "D": ["A", "B", "A", "B", "A",
                         "B", "A", "C", "A"]})

df = df1.merge(df2, how='left')

pd.pivot_table(df, index='A', columns='D', values='C', aggfunc='size', fill_value=0)

运行结果:

D       A  B  C
A
bar     3  1  1
foo     2  2  0
shtuff  0  0  0

方法二:重新索引补全缺失行

如果坚持使用count聚合函数,可在生成透视表后,用df1原始的A列值重新索引并填充0:

pivot_result = pd.pivot_table(df, index='A', columns='D', values='C', aggfunc='count', fill_value=0)
# 重新索引补全缺失行,填充0并转成整数类型
pivot_result = pivot_result.reindex(df1['A']).fillna(0).astype(int)

该方法同样能得到期望结果,但size的实现方式更高效直接。

内容的提问来源于stack exchange,提问作者Juliepvr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:32:13