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

Python Pandas:按两列唯一值统计另一列各值计数(交叉表/透视表)

按多列分组统计分类值出现次数

你需要按player和team两列的唯一组合,统计result列中各值的出现次数,同时补全未出现分类值的计数为0。以下是两种直接可行的解决方案:

方法1:groupby + value_counts + unstack

通过分组后统计组内分类频次,再将行转列并填充缺失值:

import pandas as pd

df = pd.DataFrame({
    'player': ['A','A','B','B','C','D'],
    'team': ['tmX','tmX','tmX','tmX','tmY','tmY'],
    'result': ['hit','hit','hit','miss','miss','hit']
})

# 分组统计分类频次,转列后补0并重置索引
result_df = df.groupby(['player', 'team'])['result'].value_counts()
result_df = result_df.unstack(fill_value=0).reset_index()

print(result_df)

输出结果:

player team  hit  miss
0      A  tmX    2     0
1      B  tmX    1     1
2      C  tmY    0     1
3      D  tmY    1     0

方法2:pivot_table

利用透视表直接指定行、列、聚合规则,一步生成结果:

import pandas as pd

df = pd.DataFrame({
    'player': ['A','A','B','B','C','D'],
    'team': ['tmX','tmX','tmX','tmX','tmY','tmY'],
    'result': ['hit','hit','hit','miss','miss','hit']
})

result_df = pd.pivot_table(
    df,
    index=['player', 'team'],
    columns='result',
    aggfunc='size',
    fill_value=0
).reset_index()

print(result_df)

输出结果与方法1完全一致:

player team  hit  miss
0      A  tmX    2     0
1      B  tmX    1     1
2      C  tmY    0     1
3      D  tmY    1     0

补充说明

  • value_counts()会自动统计组内每个分类的出现次数,unstack()将分类值转为列名,fill_value=0确保未出现的分类显示为0;
  • pivot_table中的aggfunc='size'用于计数,和count功能相近,若数据中无缺失值两者可互换使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:43:28