如何用pandas.pivot_table统计列值数量?含多列扩展场景
实现Excel风格的透视表计数及多列扩展
单维度计数透视(col1 × col2)
要实现Excel透视表中对col1的计数效果,有两种常用方法:
方法1:使用pd.pivot_table
直接指定values为col1(或任意存在的列),并将aggfunc设置为'count',同时用fill_value=0填充空值,和Excel透视表默认行为一致:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'col1': ['A', 'A', 'B', 'C', 'A'], 'col2': ['X', 'Y', 'X', 'Y', 'X'] }) # 生成透视表 pivot_result = pd.pivot_table( df, index='col1', columns='col2', values='col1', # 选任意列均可,aggfunc=count会统计非空值数量 aggfunc='count', fill_value=0 ) print(pivot_result)
输出结果:
col2 X Y col1 A 2 1 B 1 0 C 0 1
方法2:使用pd.crosstab(更简洁)
crosstab是专门用于交叉计数的函数,默认行为就是统计分组后的数量,代码更简洁:
crosstab_result = pd.crosstab(df['col1'], df['col2']) print(crosstab_result)
输出和上述pivot_table结果完全一致。
多维度扩展(加入Col3的多列透视)
完全支持扩展到多列场景,只需将columns参数设置为列名列表即可,两种方法都适用:
示例数据
df_multi = pd.DataFrame({ 'col1': ['A', 'A', 'B', 'C', 'A', 'B'], 'col2': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'col3': ['P', 'Q', 'P', 'Q', 'P', 'Q'] })
方法1:pd.pivot_table多列透视
pivot_multi_result = pd.pivot_table( df_multi, index='col1', columns=['col2', 'col3'], # 传入列名列表实现多列分组 values='col1', aggfunc='count', fill_value=0 ) print(pivot_multi_result)
输出结果:
col2 X Y col3 P Q col1 A 2 1 B 1 1 C 0 1
方法2:pd.crosstab多列透视
crosstab_multi_result = pd.crosstab(df_multi['col1'], [df_multi['col2'], df_multi['col3']]) print(crosstab_multi_result)
输出与上述结果一致。
内容的提问来源于stack exchange,提问作者Ahmed Tawakol
相关产品推荐
相关产品推荐

